存在“strict-dynamic”,因此禁用基于主机的白名单

Dom*_*lak 4 security w3c content-security-policy

我正在从源加载一个虚拟 JS 脚本,例如:

<script src="http://www.this-host.test/loadMe.js"></script>

CSP 标头设置为:

script-src 'self' 'strict-dynamic' 'nonce-{randomString}';

由于脚本源来自其原始主机并且标头允许CSP,因此loadMe.js应该加载和执行。

相反,我得到:

Refused to load the script 'http://www.this-host.test/loadMe.js' because it 
violates the following Content Security Policy directive: "script-src 'self' 'strict-dynamic' 'nonce-{randomString}';. 
'strict-dynamic' is present, so host-based whitelisting is disabled.
Run Code Online (Sandbox Code Playgroud)

Macintosh; Mac OS X 10_15_2已在、 浏览器上进行测试Chrome/79.0.3945.117, Firefox/71.0

但我没有收到这条消息Safari

也许值得注意的是我正在本地测试它。


无论如何,我不想使用nonce-{randomString}当标头允许从原始主机CSP加载资源时。

对此有什么想法吗?

Dom*_*lak 6

根据带有 CSP 标头设置的csplite.comscript-src 'self' 'strict-dynamic' 'nonce-{randomString}'服务器...

“strict-dynamic”只能与“hash-value”或“nonce-value”一起使用,如果它们不存在,页面上的所有脚本都将被禁用,因为“strict-dynamic”会覆盖“unsafe-inline”操作并禁用基于主机的源的白名单,包括“self”令牌

...这告诉我,如果我的loadMe.js文件正在加载另一个文件(或不必),则nonce="{randomString}"无论文件是从同一主机还是从白名单主机加载,都必须设置 HTML 标记中的属性。