为什么内联安全策略不会阻止此内联JavaScript?

时间:2014-07-21 00:03:02

标签: javascript google-chrome xss content-security-policy

我有一个页面,我设置了内容安全策略的script-src,如下所示:

script-src 'self' *.uservoice.com *.intuit.com ajax.googleapis.com localhost:* 

当我使用硬编码的内联脚本加载页面时,我已创建自己进行测试,它会像预期一样被阻止:

  

拒绝执行内联脚本,因为它违反了以下内容   内容安全策略指令:“script-src'self'   * .uservoice.com * .intuit.com ajax.googleapis.com localhost:*“。'unsafe-inline'关键字,哈希('sha256 -...')或nonce   ('nonce -...')是启用内联执行所必需的。

但是,当我动态插入新的脚本标记时,脚本不会被阻止,例如,这仍然会执行:

$("body").append("<script>alert('xss');</script>")

我在这里使用Chrome作为浏览器进行测试。我希望这个脚本也会被阻止,因为那样会有助于防止xss。有什么我可以改变来阻止这种类型的脚本注入吗?

1 个答案:

答案 0 :(得分:2)

除非您使用append,否则不会执行使用innerHtmleval()添加的脚本。所以它并没有违反CSP。

  

虽然这可能看起来像是跨站点脚本攻击,但结果是无害的。 HTML5指定不应执行通过innerHTML插入的标记。 1

请参阅script elements inserted using innerHTML do not execute when they are inserted.