我正在制作一个带有keyup()事件的表单:用户输入的每个字符都会立即显示在同一页面上的另一个div中。
它易受XSS攻击。如何使用jQuery保护它?
注意:在我的表单中,我只使用拉丁字母数字字符,以及逗号,分号,冒号。
我搜索过"改革"来自OWASP的工具,但有哪种方式更好?
提前致谢。此致
答案 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插件。