我正在 RedHat 6 Apache 2.2 上为一些带有 JavaScript 链接到 Google 的 html 文件创建内容安全策略。我在
httpd.conf
文件中添加了以下代码作为站点的虚拟主机。
Header always set Content-Security-Policy-Report-Only: "default-src 'self' https:; script-src 'self' https: https://www.google-analytics.com https://ajax.googleapis.com; style-src inline: 'self' https: 'sha256-j0bVhc2Wj58RJgvcJPevapx5zlVLw6ns6eYzK/hcA04=' https://www.google-analytics.com https://ajax.googleapis.com; font-src 'self'; img-src 'self' https: data: https://www.google-analytics.com; form-action 'self'; frame-ancestors 'none'; connect-src 'self' https: https://www.google-analytics.com; child-src 'self'"
除非我使用“不安全内联”(我不想这样做),否则无法使该策略发挥作用。最新的 Chrome 浏览器在开发者模式下要求添加 SHA256 哈希值,我这样做了(见下文)。即使我添加了推荐的 SHA256 哈希 Chrome 仍然要求我添加它???
我没有正确处理 SHA256 哈希吗?任何帮助将不胜感激。
来自 Chrome 开发者控制台。
拒绝应用内联样式,因为它违反了以下规定 内容安全策略指令:“style-src inline:'self'https: 'sha256-j0bVhc2Wj58RJgvcJPevapx5zlVLw6ns6eYzK/hcA04=' https://www.google-analytics.com https://ajax.googleapis.com”。要么 'unsafe-inline' 关键字,一个哈希值 ('sha256-j0bVhc2Wj58RJgvcJPevapx5zlVLw6ns6eYzK/hcA04='),或随机数 需要 ('nonce-...') 才能启用内联执行。
编辑:此错误中对此进行了讨论: https://bugs.chromium.org/p/chromium/issues/detail?id=546106 不完全遵循错误所说的内容,但似乎规范只允许脚本和样式标签使用 sha256 哈希值,而不允许内联脚本和样式使用 sha256 哈希值。看来您必须向您的策略添加“不安全散列属性”属性才能使其发挥作用。
但是尚不完全清楚这是否只是修复脚本部分或样式,也不清楚是否已发布。它肯定不会出现在也使用 WebKit 的 iOS 设备上,所以现在我只允许样式使用不安全内联。
原始答案(在添加上述答案之前,但为了避免混淆,请在下面添加评论)。
我看到一些问题:
inline:
,这不是有效的语法 AFAIKhttps:
指令,然后还包括特定的 https 站点 (https://www.google-analytics.com https://ajax.googleapis.com
)看起来这是 Chromium 官方跟踪的一个错误。 您可以在这里找到链接:https://issues.chromium.org/issues/41211258?pli=1 这确实很烦人。我们无法使用此安全标头或功能。 使用
unsafe-inline
将会破坏“内容安全策略”的所有好处
你可以尝试一下邪恶程度较低的“unsafe-hashes
”。
我认为目前我们还没有内联 java 脚本的解决方案。