javascript - xss过滤函数 - xss防御




jQuery.text()方法XSS安全吗? (4)

与.html()方法不同,.text()可以在XML和HTML文档中使用。 .text()方法的结果是一个包含所有匹配元素的组合文本的字符串。 (由于不同浏览器中HTML解析器的变化,返回的文本可能会在换行符和其他空格中有所不同。)

.text(data)将剥离<test></test>并给你a&f#

我有来自用户的未转发数据。

所以这样使用是安全的:

var data = '<test>a&f"#</test>'; // example data from ajax response
if (typeof(data) === 'string')
    $('body').text(data);

我可以像这样使用或者有一些问题,比如编码或某些特定的符号,我应该小心并添加更严格的验证?


因为XSS攻击依赖于能够插入DOM节点( <img /><script /> )等,而jQuery.fn.text()不支持这一点,所以它完全是XSS安全的。

正如您在此基本示例中所看到的,所有可能的HTML标记都是在内部使用createTextNode作为jQuery的结果进行编码的:

jQuery('div').text('<test>a&f"#</test>');​

因此实际插入的内容更加平等;

jQuery('div').html('&lt;test&gt;a&f"#&lt;/test&gt;');​

当您使用text方法设置元素的text ,jQuery在内部使用createTextNode ,它会转义所有特殊字符。

来自jQuery文档

我们需要注意,此方法会根据需要转义提供的字符串,以便在HTML中正确呈现。 为此,它调用DOM方法.createTextNode() ,它将特殊字符替换为其HTML实体等价物(例如&lt; for <

所以是的,它应该是安全的。 这是你在jsfiddle中例子 。 请注意标记如何显示为文字文本。


是。 它涉及文本,而不是代码。





xss