内容安全策略样式哈希

信息安全 内容安全策略
2021-09-02 12:10:53

我在页面上有一个 img 标签,其线条样式如下所示:

style="height:50px;width:180px;display:block;"

我无法将其移动到外部样式表,因为 img 标记是由第 3 方控件生成的。所以我复制了 Chrome 开发者工具中显示的哈希值。

Content-Security-Policy 的一部分如下所示:

style-src 'self' 'sha256-7kYG54iPGE/Vf+GFqobEwpF9bfCAVA/elCz7OiSmMl0=';

但 Chrome 仍会通过以下消息阻止它:

Refused to apply inline style because it violates the following Content Security Policy directive: "style-src 'self' 'sha256-7kYG54iPGE/Vf+GFqobEwpF9bfCAVA/elCz7OiSmMl0='". Either the 'unsafe-inline' keyword, a hash ('sha256-7kYG54iPGE/Vf+GFqobEwpF9bfCAVA/elCz7OiSmMl0='), or a nonce ('nonce-...') is required to enable inline execution.

策略中的哈希与错误消息中所需的哈希匹配。为什么 Chrome 仍然阻止它?

谢谢...

1个回答

看起来对于 Chrome(但不是 Firefox),您还需要明确允许'unsafe-hashes',因为单独提供哈希似乎仅适用于脚本和样式部分,而不适用于属性。8.3。"'unsafe-hashes'" 的用法这样,您的 CSP 应如下所示:

style-src 'self' 'unsafe-hashes' 'sha256-7kYG54iPGE/Vf+GFqobEwpF9bfCAVA/elCz7OiSmMl0=';

有关 Chrome 为何决定以这种方式行事的更多讨论,请参阅这个 Chromium 问题这个 W3C 问题