5

目前我正在将此方法与 jQuery 解决方案一起使用,以从可能的 XSS 攻击中清除字符串。

sanitize:function(str) {
    // return htmlentities(str,'ENT_QUOTES');
    return $('<div></div>').text(str).html().replace(/"/gi,'&quot;').replace(/'/gi,'&apos;');   
}

但我有一种感觉,它不够安全。我想念什么吗?

我在这里尝试了 phpjs 项目中的 htmlentities:http://phpjs.org/functions/htmlentities:425 /

但它有点错误并返回一些额外的特殊符号。也许它是一个旧版本?

例如:

htmlentities('test"','ENT_QUOTES');

产生:

test&amp;quot;

但应该是:

test&quot;

你如何通过javascript处理这个?

4

3 回答 3

3

如果您的字符串应该是没有 HTML 格式的纯文本,只需使用.createTextNode(text)/assigning 到.data现有文本节点的属性。无论您放在那里,都将始终被解释为文本,并且不需要额外的转义。

于 2012-07-02T11:07:55.450 回答
3

是的,动态使用 javascript。字符串来自不受信任的来源。

然后,您无需手动对其进行消毒。使用 jQuery,您可以编写

​var str = '<div>abc"def"ghi</div>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​';

​$​('test').text(str);
$('test').attr('alt', str);

浏览器将为您将数据与代码分开。

示例:http: //jsfiddle.net/HNQvd/

于 2012-07-02T11:14:08.773 回答
1

您也应该引用其他字符:

'
"
<
>
(
)
;

它们都可以用于 XSS 攻击。

于 2012-07-02T11:11:54.767 回答