2012-02-27 133 views
0

我正在尋找一種驗證用戶輸入HTML的方法,類似於您在評論表單中看到的內容。用戶的輸入應限制爲最基本的標籤,如p,ul,li,div,img。唯一允許的屬性是樣式。驗證用戶輸入HTML子集

驗證可能發生在客戶端,通過Javascript或服務器端,通過Ruby。我希望找到一個可以做到這一點的Javascript庫,或者至少找到幾個RegEx來做到這一點。

感謝您的建議。

+2

你需要驗證在服務器端,無論你是否有客戶端 - 方面驗證。絕對沒有什麼能夠阻止用戶擺脫腳本(例如通過Firebug)來解決客戶端驗證問題。有了這個說法,客戶端驗證會使頁面更加友好。 – 2012-02-27 21:27:27

+0

樣式可以是一個危險的屬性,除非您限制它可以操作的屬性。由於您不允許使用''標籤,因此它不能用於點擊插入,但仍可用於其他類型的惡作劇,如覆蓋整個頁面:'

' – 2012-02-27 21:41:16

回答

0

您可以使用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'} 
    } 
) 
+0

這可能正是我想要的。謝謝!我會給它一個旋風。 – tmo256 2012-02-28 00:19:19