【发布时间】:2017-08-13 17:04:12
【问题描述】:
在我的每个响应的 asp.net 核心应用程序中,我正在添加内容安全策略标头。我知道对于 IE,标题名称是 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 值需要与 header 中的 nonce 值匹配。 some details here
我实现了中间件和标签助手,它们分别将随机数添加到标题和脚本标签中。而且我确保两个 nonce 值在页面呈现时都匹配。
然后只是为了在页面上进行测试,我添加了脚本没有随机数
<script type="text/javascript">
$(function () {
alert('i am hacker');
})
</script>
谷歌浏览器检测到这种违规行为并按预期阻止上述脚本。但是在 IE 11 中,上面的脚本执行时没有任何违规。同样,我确保 IE 中的标题是 X-Content-Security-Policy
为什么 IE 11 不阻塞脚本?
【问题讨论】:
标签: internet-explorer asp.net-core internet-explorer-11 content-security-policy coreclr