首页 > 解决方案 > 尽管定义了 script-src,但仍报告了 Script-src-elem

问题描述

相关:为什么 script-src-elem 不使用 script-src 中的值作为后备?

我看到https://track.adform.net/serving/scripts/trackpoint/async/由于有效指令而被阻止的 CSP 报告很少script-src-elem。正如您在下面的政策中看到的那样,我没有定义script-src-elem但希望它回落到script-src甚至default-src. 那就是我在调试这个策略时的样子。

我自己无法复制该报告。

完整报告:

{
    "csp-report": {
        "document-uri": "https://www.example.com/some/uri",
        "effective-directive": "script-src-elem",
        "original-policy": "default-src 'self' data: fonts.gstatic.com *.googleapis.com browser.sentry-cdn.com *.youtube.com i.ytimg.com sentry.io images.prismic.io *.atdmt.com *.adnxs.com *.google.se *.google.com *.facebook.com connect.facebook.net *.hotjar.com hotjar.io *.hotjar.io *.adform.net www.google-analytics.com www.gstatic.com www.googletagmanager.com stats.g.doubleclick.net;script-src 'self' 'unsafe-inline' 'unsafe-eval' data: fonts.gstatic.com *.googleapis.com browser.sentry-cdn.com *.youtube.com i.ytimg.com sentry.io images.prismic.io *.atdmt.com *.adnxs.com *.google.se *.google.com *.facebook.com connect.facebook.net *.hotjar.com hotjar.io *.hotjar.io *.adform.net www.google-analytics.com www.gstatic.com www.googletagmanager.com stats.g.doubleclick.net;style-src 'self' 'unsafe-inline' data: fonts.gstatic.com *.googleapis.com browser.sentry-cdn.com *.youtube.com i.ytimg.com sentry.io images.prismic.io *.atdmt.com *.adnxs.com *.google.se *.google.com *.facebook.com connect.facebook.net *.hotjar.com hotjar.io *.hotjar.io *.adform.net www.google-analytics.com www.gstatic.com www.googletagmanager.com stats.g.doubleclick.net;img-src 'self' * data:;report-uri https://example.report-uri.com/r/d/csp/reportOnly",
        "blocked-uri": "https://track.adform.net/serving/scripts/trackpoint/async/"
    }
}

我只在主要是 Windows 的 chrome 浏览器中看到它。Chromium 跟踪器中有一个错误 [1] 报告,但在没有进一步调查的情况下被关闭,并且似乎影响了其他东西。

我的政策是否有问题,或者应该再次在跟踪器中打开错误?

[1] https://bugs.chromium.org/p/chromium/issues/detail?id=880816

标签: content-security-policy

解决方案


尽管定义了 script-src ,但仍报告了 Script-src-elem

  • Chrome 严格遵守 CSP3 规范,它将违反的指令报告为有效指令。如果此类指令将在政策中显示,Chrome会在应该发生违规的地方发送有效指令。

  • 尽管 CSP3 规范,Firefox 确实发送了一个真正违反的指令,因为它出现在策略中。这将包含 default-src 指令,以防在执行指令时回退到默认源而导致违规。

  • 浏览器控制台始终显示策略中实际违反的指令。

因此,在政策的情况下:

default-src 'none'
  • Chrome 发送一个script-src-elemfor<script><script src=>,并发送一个script-src-attrfor 内联事件处理程序和 javascript:-navigation,除了一个错误(此错误不会触及您的 CSP,因为允许内联脚本)。

  • Forefoxdefault-src在违规报告中发送一个。

谁的行为更有用是一个悬而未决的问题,但我更喜欢 Firefox。
因为 Chrome 可以让任何在回退指令长链的情况下寻找违规原因的人发疯,例如在Worker的情况下,特别是当某些浏览器跳过该链中的一些回退指令时。

所以在这里我们甚至不需要“去看医生”,在你的情况下 script-src 真的用于任何脚本。

正确的问题是为什么https://track.adform.net/serving/scripts/trackpoint/async/偶尔会在script-src指令中被阻止,尽管其中*.adform.net指定了源

由于无法重现这种情况,唯一的方法是分析统计数据 - 用户代理和 IP。

如果 IP 属于公共托管,您可以忽略此类违规行为 - 这是一个机器人。

如果阻止了唯一一个 URL https://track.adform.net/serving/scripts/trackpoint/async/,则可能是此处提到的某些浏览器“隐私”扩展,因为此 URL 是一个跟踪器。

来源是browser.sentry-cdn.com指您使用哨兵吗?sentry 是否显示 CSP 错误?它应该捕获这些,因为 CSP 违规通过SecurityPolicyViolationEvent具有内置的 javascript 错误处理程序。

PS:我只遇到过一个奇怪的“Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36”,它阻止了所有 HTTPS: 来源。从 中可以看出original-policy,这个用户代理只是从策略中删除了所有 https://。

我的政策是否有问题,或者应该再次在跟踪器中打开错误?

我看不出你的 CSP 有什么问题。无论如何它不应该锁定https://track.adform.net/serving/scripts/trackpoint/async/
恕我直言,打开一个需要收集一些细节的错误。


推荐阅读