【发布时间】:2020-11-30 16:39:59
【问题描述】:
我有一个我们正在导入的 JS 文件
<script src="https://example.com/file.js"/>
我有一个 CSP 策略,其中包含当我将此文件的输出粘贴到时生成的哈希:https://report-uri.com/home/hash
但我仍然收到一条错误消息,说它违反了这个 SHA256 校验和。我究竟做错了什么?那不是假设有文件的校验和吗?
【问题讨论】:
我有一个我们正在导入的 JS 文件
<script src="https://example.com/file.js"/>
我有一个 CSP 策略,其中包含当我将此文件的输出粘贴到时生成的哈希:https://report-uri.com/home/hash
但我仍然收到一条错误消息,说它违反了这个 SHA256 校验和。我究竟做错了什么?那不是假设有文件的校验和吗?
【问题讨论】:
仅在 CSP 级别 3 https://www.w3.org/TR/CSP3/#external-hash 中支持外部文件的哈希。许多浏览器仍然只支持级别 2。
对于 CSP 2 级浏览器,您需要包含实际的主机名,例如 example.com。您可以通过子资源完整性(SRI 哈希)实现相同的脚本白名单。
【讨论】:
report-uri.com不计算外部脚本的哈希值,它仅用于字符串。因此,它只是从输入的文件名字符串计算哈希值,而不是从文件内容计算哈希值。
可以计算外部文件的正确哈希值,例如,here。
并且不要忘记将integrity= 属性添加到<script src='...' integrity='...'>。
请注意,Mozilla Firefox 对 外部 脚本执行 not support hash-sources,但仅用于内联脚本。
Safari - 与 Firefox 相同(至少 Safari 12.1.1)。
'strict-dynamic' 令牌在 2020 年 12 月也不是 widely supported
【讨论】: