【问题标题】:Why is my Content Security Policy not being adhered to?为什么我的内容安全政策没有得到遵守?
【发布时间】:2021-03-24 09:00:40
【问题描述】:

我遇到了一个非常奇怪的情况,即忽略哈希,尽管它存在于 Content-Security-Policy 中。

在我们的网站上安装 Hotjar 时发生这种情况,为它使用的每个内联脚本手动添加哈希值,但显然它可能发生在任何动态插入的内联脚本中。

在下面的控制台错误消息中,您可以看到所需的哈希存在,但 Chrome 建议需要添加它...

拒绝,因为它违反了以下内容安全策略指令适用内嵌样式:“风格-src '中的随机数,llX8ZkdD3suoiNrpE9mCatplNhRYmlKw' '自我' 'SHA256-HRecKxp1fRukFUlrmQh3cAVyb / pNYtdWFGJ2EL5FzdE =' 'SHA256-SvLgADqEePEV9RNxBrRQXSBJafFHcVNG7cPzHz6h9eA ='“SHA256,fGP7dUodgG1o2qqo7hPGqd + 2FEE7z2Z4Xg5muj + XIOQ = ' 'sha256-8hoDThJonkR / uDTFl5y8ugf9U3kcHPL2sq19iPFHTds =' 'SHA256-ecMh1s2mivgxX0zzJbkamgAS7kPx + 1EqcHz8Uz30i78 =' 'SHA256-Qv05 / NST / MWFR5NB3hDHRW9iI424uc8WpuRssGdOAsU =' 'sha256-47DEQpj8HBSa + / + TIMW 5JCeuQeRkm5NMpJWZG3hSuFU ='' 的 SHA256-S3EaMUkdpUGJFgSHH5d / 29s3oD8 / sutxvMfQoprfQ+g=' 'sha256-qVlOiWrAwuIfu8+uHKHkgg4qBA7YOoSm8A0yB4LfrNw=' *.hotjar.com *.typekit.net"。

但补救方法是包含一个已经存在的哈希:

需要'unsafe-inline' 关键字、哈希('sha256-S3EaMUkdpUGJFgSHH5d/29s3oD8/sutxvMfQoprfQ+g=')或随机数('nonce-...')启用内联执行。

CSP 中的哈希值和建议的解决方案是相同的:

这是完整的 CSP:

Content-Security-Policy: default-src *; base-uri 'self'; img-src * data:; style-src 'nonce-{$nonce}' 'self' 'sha256-HRecKxp1fRukFUlrmQh3cAVyb/pNYtdWFGJ2EL5FzdE=' 'sha256-SvLgADqEePEV9RNxBrRQXSBJafFHcVNG7cPzHz6h9eA=' 'sha256-fGP7dUodgG1o2qqo7hPGqd+2FEE7z2Z4Xg5muj+XIOQ=' 'sha256-8hoDThJonkR/uDTFl5y8ugf9U3kcHPL2sq19iPFHTds=' 'sha256-ecMh1s2mivgxX0zzJbkamgAS7kPx+1EqcHz8Uz30i78=' 'sha256-Qv05/NsT/MWFR5NB3hDHRW9iI424uc8WpuRssGdOAsU=' 'sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=' 'sha256-S3EaMUkdpUGJFgSHH5d/29s3oD8/sutxvMfQoprfQ+g=' 'sha256-qVlOiWrAwuIfu8+uHKHkgg4qBA7YOoSm8A0yB4LfrNw='  *.hotjar.com *.typekit.net; script-src 'nonce-{$nonce}' 'self' 'sha256-A0/707MQdpfr/tR18VnYSk7JMJoUQSBURZEJa8wF6po=' 'sha256-1kpOd8fXCkigqXNekDPt+noalDB6YI+94YhtU3ETmvE=' *.hotjar.com *.googletagmanager.com *.universe.com *.google-analytics.com *.quantserve.com *.quantcount.com *.ads-twitter.com *.facebook.net analytics.twitter.com *.stripe.com polyfill.io *.queue-it.net *.amplitude.com; object-src 'none'; frame-ancestors 'self' *.queue-it.net

要复制这一点,您只需使用上述 CSP 安装 Hotjar。

这是 Chrome 错误还是我错过了什么?

有兴趣的人可以在这里截屏(点击放大)。

【问题讨论】:

  • 文本引用具有不同的普通和 em-dashes 组合,在控制台的等宽字体中看起来相同。最好的猜测是哈希或 CSP 指令无效,因为某处的破折号类型错误。
  • @GuyIncognito 那是我的转录错误。原作中不存在。现已修复。

标签: google-chrome content-security-policy hotjar


【解决方案1】:

此问题与CSP header fails with "Refused to apply inline style..." but I have already added the hash相同。

你有一个:

  1. 标签中的内联事件处理程序,如onclick='javascript_here'onload='js_handler()' 等。
  2. javascript-navigation like <a href='javascript:...'

Chrome 会为这些计算哈希值,但要允许这种内联脚本,您还需要将 unsafe-hashes 标记添加到“script-src”。

注意:Safari 12 does not support 'unsafe-hashes',因此在 1 的情况下使用 addEventListener() 挂起事件处理程序可能会更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-15
    • 2019-03-14
    • 2015-07-22
    • 2016-10-03
    • 2017-04-24
    • 2020-12-29
    • 2016-07-19
    相关资源
    最近更新 更多