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

Vyt*_*tas 63 javascript security xss jquery

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

所以这样使用是安全的:

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

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

Jam*_*ice 57

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

来自jQuery文档:

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

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

  • 请注意,此函数也执行相反的操作 - 因此在已经转义的数据上调用它会导致它被转义,这可能会无意中导致 XSS - 例如 http://jsfiddle.net/7ykbosas/1/ (3认同)

Mat*_*att 14

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

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

jQuery('div').text('<test>a&f"#</test>');?
Run Code Online (Sandbox Code Playgroud)

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

jQuery('div').html('&lt;test&gt;a&f"#&lt;/test&gt;');?
Run Code Online (Sandbox Code Playgroud)


Mat*_*ias 8

将结果插入DOM时仍需要小心 - 请参阅:使用JavaScript和JQuery的跨站点脚本漏洞.

但是,要设置元素的文本,文本应该是XSS安全的.

  • +1这非常重要且经常被忽视.总结一下:`JQuery text()返回未转义的有效负载,如果将其传递给.after()或append()等方法,可能会导致执行恶意脚本. (4认同)