散列违反 CSP

CSP violation with hash

我有一个由

导入的 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 哈希)实现相同的脚本白名单。

  1. report-uri.com do not 计算外部脚本的哈希值,它仅适用于字符串。因此,它只是从输入的 file_name 字符串而不是文件内容中计算哈希值。
    可以计算外部文件的正确哈希值,例如 here.
    并且不要忘记将 integrity= 属性添加到 <script src='...' integrity='...'>.

  2. 注意,Mozilla Firefox not support hash-sources 用于 外部 脚本,但仅用于内联。
    Safari - 与 Firefox 相同(至少 Safari 12.1.1)。

  3. 'strict-dynamic' 代币也不像 2020 年 12 月那样