如果声明了散列,Chrome 是否应该忽略 unsafe-inline 指令?

Is Chrome supposed to ignore the unsafe-inline directive if a hash is declared?

鉴于以下情况:

"Content-Security-Policy" value="
     default-src 'none'; 
     script-src 'unsafe-eval' 'unsafe-inline' 'self' *.myhost.com 'sha256-myHash';

<script type="text/javascript" src="myScript.js"></script>
<script type="text/javascript" integrity='sha-256-myHash'>
     //some stuff
</script>

除非提供散列,否则我希望底部脚本不会加载。我的印象是 Chrome 会忽略 unsafe-inline 并寻找散列。不安全内联只是 IE 的后备。

我尝试的另一种方法是:

(讨论 here

"Content-Security-Policy" value="
             default-src 'self'
             script-src 'self' 'unsafe-inline' 'strict-dynamic' *.myhost.com http: https:;

@Scripts.Render("~/bundles/myScripts");

这从不加载我的本地脚本,由于严格动态,它忽略了白名单,因此 MVC 通过 Scripts.Render 发出的任何内容都不会加载。

我知道内联脚本并不理想,但现在无法避免。我 99% 肯定有一个 SO post 某处讨论了这个,其中详细说明了什么是跨浏览器支持的最佳选择(即 Chrome 忽略不安全内联但为 IE 提供它)但我不能找到拯救我生命的东西。

有什么指点吗?

谢谢。

它实际上是一个将在存在时使用的随机数,而不是哈希值。

可以在此处找到更多信息:

https://csp.withgoogle.com/docs/strict-csp.html