2012-04-13 59 views
0

我正在使用keyup()事件創建窗體:用戶鍵入的每個字符都立即顯示在同一頁面上的另一個div上。如何防止keyup()jQuery事件的XSS?

它容易受到XSS的影響。我如何使用jQuery來保護它?

注意:在我的表單中,我只使用拉丁字母數字字符,以及逗號,分號,冒號。

我從OWASP搜索了「改革」工具,但有沒有更好的方法?

在此先感謝。問候

回答

3

有幾個可用的細節:記住,你不必使用jQuery的HTML「解析」的一切。而不是使用.html(),使用DOM操作和.text()(它們通常也更快)。例如:如果這是不可能的

$('#result').text($('<span>').addClass('whatever').text(someInput)); 

,你也可以做到完美無瑕的HTML與.text()設置,然後用.html()取它逃脫:

$('#result').html('<span class="whatever">' + someInput + '</span>'); 

將成爲這一點。例如,這樣的:

var data = 'This text: **is bold**'; 

$('#result').html(data.replace(/\*\*(.+?)\*\*/g, '<b>$1</b>')); 

會變成這樣:

var data = 'This text: **is bold**'; 

$('#result').html(data.replace(/\*\*(.+?)\*\*/g, function(x) { 
    return '<b>' + $('<div>').text(x).html() + '</b>'; 
})); 
+0

嗨minitech,謝謝你的迴應。事實上,我使用'html()'並使用'text()'爲我做了。感謝您提供的其他信息,這也將非常有用。 Regards – alexx0186 2012-04-13 04:01:35

1

我發現列入node-validator的XSS吸塵器完整。您感興趣的代碼可用here。你需要在瀏覽器中稍微清理一下(移除module.exports並且用一個Javascript閉包來代替),但它應該可以很好地工作。如果你想,你也可以直接將它加入到JQuery插件中。

+0

嗨,謝謝你的迴應。我正在更詳細地調查。感謝您的鏈接。問候 – alexx0186 2012-04-13 04:04:32