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

use*_*280 8 javascript xss google-chrome content-security-policy

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

script-src 'self' *.uservoice.com *.intuit.com ajax.googleapis.com localhost:* 
Run Code Online (Sandbox Code Playgroud)

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

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

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

$("body").append("<script>alert('xss');</script>")
Run Code Online (Sandbox Code Playgroud)

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

She*_*eng 3

使用append或添加的脚本innerHtml不会被执行,除非您使用eval(). 所以这并不违反CSP。

尽管这看起来像是跨站点脚本攻击,但结果是无害的。HTML5 规定不应执行通过innerHTML 插入的标签。1

请参阅使用innerHTML 插入的脚本元素在插入时不会执行。