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

Script-src-elem being reported although script-src is defined

相关:Why is script-src-elem not using values from script-src as a fallback?

我看到 CSP 报告很少,例如https://track.adform.net/serving/scripts/trackpoint/async/ 由于有效指令 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

Script-src-elem being reported although script-src is defined

  • Chrome 强烈遵守 CSP3 规范,它报告 violated-directive as effective-directive。 Chrome 发送 有效指令 如果此类指令将出现在政策中,则应该发生违规行为。

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

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

因此在政策的情况下:

default-src 'none'
  • Chrome 为 <script><script src=> 发送一个 script-src-elem,为内联事件处理程序发送一个 script-src-attr 和 javascript:-导航,除了一个 bug(这个错误不会触及你的 CSP,因为允许内联脚本)。

  • Forefox 在违规报告中发送 default-src

谁的行为更有用是一个悬而未决的问题,但我更喜欢 Firefoxes。
因为 Chrome 可以让任何在长回退指令链的情况,例如 Worker,尤其是当某些浏览器跳过此链中的某些回退指令时。

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

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

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

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

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

browser.sentry-cdn.com 来源是否意味着您使用 sentry? Does sentry shows the CSP errors? It should catch those, because CSP violations has built-in javascript errors handlers via SecurityPolicyViolationEvent

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://。

Is there something wrong with my policy or perhaps a bug should be opened in the tracker again?

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