Javascript清理:插入可能的XSS html字符串的最安全的方法

Som*_*ody 5 javascript xss html-sanitizing

目前我正在使用这种方法与jQuery解决方案,以清除可能的XSS攻击字符串.

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

但我觉得它不够安全.我错过了什么吗?

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

但它有点被窃听并返回一些额外的特殊符号.也许这是旧版本?

例如:

htmlentities('test"','ENT_QUOTES');
Run Code Online (Sandbox Code Playgroud)

生产:

test&amp;quot;
Run Code Online (Sandbox Code Playgroud)

但应该是:

test&quot;
Run Code Online (Sandbox Code Playgroud)

你是如何通过javascript处理的?

Ole*_*kov 3

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