目前,我正在使用这种方法与jQuery解决方案,以清除可能的XSS攻击字符串。
sanitize:function(str) {
// return htmlentities(str,'ENT_QUOTES');
return $('<div></div>').text(str).html().replace(/"/gi,'"').replace(/'/gi,''');
}但我有种感觉它不够安全。我错过了什么吗?
我尝试过phpjs项目中的htmlentities:http://phpjs.org/functions/htmlentities:425/
但它有点But,并返回一些额外的特殊符号。也许是旧版本?
例如:
htmlentities('test"','ENT_QUOTES');产生:
test&quot;但应该是:
test"你是如何通过javascript来处理这个问题的?
发布于 2012-07-02 19:07:55
如果你的字符串是没有超文本格式的纯文本,只需使用.createTextNode(text)/assigning到现有文本节点的.data属性即可。无论你放在哪里,都会被解释为文本,不需要额外的转义。
发布于 2012-07-02 19:14:09
是动态使用javascript。字符串来自不可信的来源。
这样你就不需要手动清理它了。使用jQuery,您只需编写
var str = '<div>abc"def"ghi</div>';
$('test').text(str);
$('test').attr('alt', str);浏览器将为您将数据与代码分开。
示例:http://jsfiddle.net/HNQvd/
发布于 2012-07-02 19:11:55
你也应该引用其他字符:
'
"
<
>
(
)
;它们都可以用于XSS攻击。
https://stackoverflow.com/questions/11292147
复制相似问题