2012-04-13 60 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