security - 存在“严格动态”,因此禁用了基于主机的白名单
问题描述
我正在从原点加载一个虚拟 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
标头允许从源主机加载资源时使用。
对此有什么想法吗?
解决方案
根据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
源文件。
推荐阅读
- uml - 这些类被视为边界还是实体?
- node.js - 从android设备发送http请求到PC上的nodejs本地服务器
- javascript - 我想将我的圆圈标记(请参阅我的创建圆圈的代码)更改为三角形标记。我需要什么代码?
- r - 合并R中多个excel文件中的特定列?
- java - 如何在 Java Spring @PropertySource 注释中将字符串更改为小写
- javascript - flatpickr 更改事件中的清除日期
- visual-studio - SFML 2.5.1 错误 LNK1112 模块机器类型“x86”与目标机器类型“x64”冲突
- python - 如何在 Python 中指定可选的排序键
- r - 循环特定列数据并将结果添加为 R 中的新列
- r - 在 r 中填充一个 4-D 数组