我在CSP中使用此脚本指令:
script-src 'sha256-0pXdwEz+mZ/xD0qLLNDMVgeorh4Qr4Fv06RA35mAlk4='
和一个脚本标签:
<script type="text/javascript" src="https://domain.xxx/frontframe.js" integrity="sha256-0pXdwEz+mZ/xD0qLLNDMVgeorh4Qr4Fv06RA35mAlk4=" crossorigin="anonymous"></script>
它可以在chrome和firefox中使用,但不能在Safari中使用,除非我将CSP更改为:
script-src 'self' 'sha256-0pXdwEz+mZ/xD0qLLNDMVgeorh4Qr4Fv06RA35mAlk4='
我在没有指令'self'的情况下遇到的错误是:
Refused to load https://domain.xxx/frontframe.js because it does not appear in script-src directive of the Content Security Policy.
我做错什么了吗?或者这是Safari常见的怪癖之一?我的目标是只加载具有有效sha256值的脚本,而不加载其他任何由指令“ self”赋予其可能性的脚本。
答案 0 :(得分:1)
在CSP 2.0版之前,散列仅适用于内联脚本和样式。从CSP 3.0版开始,还允许将散列用于外部源。参见https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src。 Safari可能与CSP 3.0版不兼容。
答案 1 :(得分:0)
iOS does not support SRI(integrity=
属性)上的Safari。因此,Safari基于上面的属性,因此不支持哈希值以允许外部脚本。
更新:尽管MDN的信息是Safari 12.1.1仍support SRI。