如何针对keyup()jQuery事件阻止XSS?

时间:2012-04-13 03:47:25

标签: javascript jquery xss

我正在制作一个带有keyup()事件的表单:用户输入的每个字符都会立即显示在同一页面上的另一个div中。

它易受XSS攻击。如何使用jQuery保护它?

注意:在我的表单中,我只使用拉丁字母数字字符,以及逗号,分号,冒号。

我搜索过"改革"来自OWASP的工具,但有哪种方式更好?

提前致谢。此致

2 个答案:

答案 0 :(得分:3)

有一些可用的细节:请记住,您不必使用jQuery的HTML“解析”所有内容。不使用.html(),而是使用DOM操作和.text()(通常也更快)。例如,这个:

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

会变成这样:

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

如果无法做到这一点,您还可以使用.text()进行设置,然后使用.html()进行提取,从而实现完美无缺的HTML转义。例如,这个:

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>';
}));

答案 1 :(得分:1)

我发现node-validator中包含的xss清理器非常全面。您感兴趣的代码可用here。您需要将其清理一点以便在浏览器中使用(删除module.exports并换行Javascript闭包)但它应该可以非常无缝地工作。如果你愿意,你也可以将它直接转换成JQuery插件。