我有一个页面,我设置了内容安全策略的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。有什么我可以改变来阻止这种类型的脚本注入吗?
答案 0 :(得分:2)
除非您使用append
,否则不会执行使用innerHtml
或eval()
添加的脚本。所以它并没有违反CSP。
虽然这可能看起来像是跨站点脚本攻击,但结果是无害的。 HTML5指定不应执行通过innerHTML插入的标记。 1
请参阅script elements inserted using innerHTML do not execute when they are inserted.