content-security-policy - 尽管定义了 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
解决方案
尽管定义了 script-src ,但仍报告了 Script-src-elem
Chrome 严格遵守 CSP3 规范,它将违反的指令报告为有效指令。如果此类指令将在政策中显示,Chrome会在应该发生违规的地方发送有效指令。
尽管 CSP3 规范,Firefox 确实发送了一个真正违反的指令,因为它出现在策略中。这将包含 default-src 指令,以防在执行指令时回退到默认源而导致违规。
浏览器控制台始终显示策略中实际违反的指令。
因此,在政策的情况下:
default-src 'none'
Chrome 发送一个
script-src-elem
for<script>
和<script src=>
,并发送一个script-src-attr
for 内联事件处理程序和 javascript:-navigation,除了一个错误(此错误不会触及您的 CSP,因为允许内联脚本)。Forefox
default-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/
。
恕我直言,打开一个需要收集一些细节的错误。
推荐阅读
- flutter - Flutter:错误:“await”只能用于“async”或“async*”方法。甚至认为该方法是异步的
- sql-server - 将变量传递给 Openquery 和 SQL 注入
- python - SQLAlchemy 按列表的字典过滤
- android - Glide 版本 4.11.0 出现“找不到 compiler.jar”错误
- aframe - aframe glTF cube-env-map
- java - 将数据从第二个活动中的 ArrayList 移动到主要活动 - android
- java - 使用 ESAPI sendRedirect 修复 openRedirect 但不能在 Java 中工作?
- javascript - 将树枝数组转换为 javascript 以访问对象
- python - boto3 - 'utf-8' 编解码器无法编码字符
- sql - 使用 select 语句的结果在单个查询中插入多行