【问题标题】:Script-src-elem being reported although script-src is defined尽管定义了 script-src,但仍报告了 Script-src-elem
【发布时间】:2021-02-19 19:37:19
【问题描述】:

相关: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

【问题讨论】:

    标签: content-security-policy


    【解决方案1】:

    Script-src-elem 被报告,尽管 script-src 已定义

    • Chrome 严格遵守 CSP3 规范,它报告 violated-directive as effective-directive。如果该指令将在政策中显示,Chrome 会发送 有效指令 应该在哪里发生违规。

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

    • 浏览器控制台始终显示实际违反的指令,因为它存在于策略中。

    因此在政策的情况下:

    default-src 'none'
    
    • Chrome 为<script><script src=> 发送一个script-src-elem,并为内联事件处理程序和javascript:-navigation 发送一个script-src-attr,除了一个bug(由于内联脚本,此错误不会影响您的CSP是允许的)。

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

    谁的行为更有用是一个悬而未决的问题,但我更喜欢 Firefox 的一个。
    因为 Chrome 可以让任何寻找违规原因的人在一长串后备指令的情况下发疯,例如就像Worker 的情况一样,尤其是当一些浏览器跳过这个链中的一些后备指令时。

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

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

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

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

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

    browser.sentry-cdn.com 来源是否意味着您使用sentry? 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/
    恕我直言,打开一个需要收集一些细节的错误。

    【讨论】:

    • 我可以确认这是正确的答案。我创建了an example webpage 来比较跨浏览器的 CSP 违规实现的差异。
    猜你喜欢
    • 2021-05-22
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 2020-09-19
    • 2012-08-24
    • 1970-01-01
    相关资源
    最近更新 更多