2013-08-22 64 views
0

我想在javascript從一個字符串中去除幾乎所有的HTML標籤,只允許一些基本的標籤
(&剝奪他們的屬性),以防止跨站點腳本安全剝離HTML標籤中的JavaScript與白名單

A lot of people說,不應該用javascript來完成,因爲客戶端可能禁用了javascript,導致過濾器中斷。然而,我的整個項目取決於JavaScript,並且沒有禁用客戶端的JavaScript會看到輸出,再加上我無法做到服務器端。

(1)在這種情況下,我可以安全地進行假設嗎?

bobince建議to use the DOM(而不是RegEx)過濾可能不安全的輸入。我肯定沒有XSS專家,但因爲他的例子依賴於字符串被插入到DOM 過濾器做他的工作之前,我能想象的,因爲類似的東西可能是不安全的:

var unsecureString = '<img src=".." onload="alert(\'bad\')" />'; 
$('#alice').update(unsecureString); 
filterNodes($('#alice'), {p:[],a:['href']}); // see link above 

(2)我可以肯定,上述不良事件不會發生?

(3)如果不是:如何避免這樣的問題,但仍然使用DOM?

回答