X-Content-Security-Policy
,而对于其他浏览器如chrome,其名称为Content-Security-Policy
。
头信息的值看起来像下面这样,其中nonce
对于每个响应都是不同的。default-src 'none';
script-src 'self' 'nonce-somerandomvalue-differnt-foreach-reasone' 'unsafe-eval';
style-src 'self' 'unsafe-inline';
img-src 'self' data:;
font-src 'self';
object-src 'self';
connect-src 'self';
report-uri /csp/report;
该应用程序在某些页面上使用内联JavaScript。因此,为了修复内联脚本违规问题,我在脚本标签中添加了相同的
nonce
值。<script type="text/javascript" nonce="somerandomvalue-differnt-foreach-reasone">
这里重要的一点是,nonce值需要与标头中的nonce值匹配。详情请参见此处。
我实现了中间件和标记辅助程序,将nonce添加到标头和脚本标记中。并确保页面呈现时两个
nonce
值匹配。然后,只是为了测试目的,在一个页面上添加了没有
nonce
的脚本。<script type="text/javascript">
$(function () {
alert('i am hacker');
})
</script>
谷歌浏览器检测到此违规行为并按预期阻止了上述脚本。然而,在IE 11中,上述脚本可以执行而没有任何违规行为。同样,我确保IE中的标头是X-Content-Security-Policy
。
为什么IE 11没有阻止脚本?