首页 > 解决方案 > 存在“严格动态”,因此禁用了基于主机的白名单

问题描述

我正在从原点加载一个虚拟 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.

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

不过,我没有收到此消息Safari

也许很高兴注意到我正在本地测试它。


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

对此有什么想法吗?

标签: securitycontent-security-policyw3c

解决方案


根据csp.withgoogle.com服务器:

出于向后兼容性的原因,“严格动态”本身会导致浏览器仅依赖随机数或哈希值并忽略 script-src 中的 URI 白名单。

这告诉我我应该这样定义它:

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

如果在运行时loadMe.js"加载另一个script src文件,请像这样定义它:

<script strict-dynamic nonce="{randomString}" src="http://www.this-host.test/loadMe.js"></script>

当然你必须信任loadMe.js源文件。


推荐阅读