我正在尋找一種驗證用戶輸入HTML的方法,類似於您在評論表單中看到的內容。用戶的輸入應限制爲最基本的標籤,如p,ul,li,div,img。唯一允許的屬性是樣式。驗證用戶輸入HTML子集
驗證可能發生在客戶端,通過Javascript或服務器端,通過Ruby。我希望找到一個可以做到這一點的Javascript庫,或者至少找到幾個RegEx來做到這一點。
感謝您的建議。
我正在尋找一種驗證用戶輸入HTML的方法,類似於您在評論表單中看到的內容。用戶的輸入應限制爲最基本的標籤,如p,ul,li,div,img。唯一允許的屬性是樣式。驗證用戶輸入HTML子集
驗證可能發生在客戶端,通過Javascript或服務器端,通過Ruby。我希望找到一個可以做到這一點的Javascript庫,或者至少找到幾個RegEx來做到這一點。
感謝您的建議。
您可以使用Sanitize來過濾HTML。
使用你在你的問題中列出的示例元素,你會使用這樣的事情在你的驗證代碼:
Sanitize.clean(html,
:elements => ['p', 'ul', 'li', 'div', 'img'],
:attributes => {'
'all' => ['style']
}
)
正如我在我的評論中提到的上方,使style
屬性可能是危險的,特別是如果你允許<a>
標籤,因爲如果用戶創建一個覆蓋整個頁面的不可見鏈接,它會打開你達到clickjacking的攻擊。
如果你想允許<a>
標籤,我會建議禁止style
完全或許將rel=nofollow
用戶提供的鏈接:
Sanitize.clean(html,
:elements => ['p', 'ul', 'li', 'div', 'img', 'a'],
:add_attributes => {
'a' => {'rel' => 'nofollow'}
}
)
這可能正是我想要的。謝謝!我會給它一個旋風。 – tmo256 2012-02-28 00:19:19
你需要驗證在服務器端,無論你是否有客戶端 - 方面驗證。絕對沒有什麼能夠阻止用戶擺脫腳本(例如通過Firebug)來解決客戶端驗證問題。有了這個說法,客戶端驗證會使頁面更加友好。 – 2012-02-27 21:27:27
樣式可以是一個危險的屬性,除非您限制它可以操作的屬性。由於您不允許使用''標籤,因此它不能用於點擊插入,但仍可用於其他類型的惡作劇,如覆蓋整個頁面:'Nothing to see here. ' –
2012-02-27 21:41:16