内容安全策略阻止列入白名单的域

Content-Security-Policy Blocking Allowlisted Domains

我已经使用 content-security-policy-report-only header 数周了,并且发现在同一个 csp header 中列入许可名单的多个域存在违规行为。我将我想要加入白名单的所有域都放在了默认的 src 中,并且没有任何其他指令(除了用于 nonce 的样式 src 之外)。我看到其他流量似乎通过了,当我在自己的浏览器上测试 url 时,它成功了,没有任何违规行为。我一直在寻找这背后的可能原因,这让我看到了诸如 , Why is script-src-elem not using values from script-src as a fallback?, and https://csplite.com/csp277/

之类的帖子

这些 link 表示状态代码 0 或空表示请求在浏览器尝试加载 link 时被阻止,并且可能由于广告拦截器而发生。我还看到了这些状态代码 0 违规报告,并过滤掉了状态代码 0/空。但即使在更改之后,我仍然看到一些请求违反了白名单域并且状态代码为 200。这是否也是由于广告拦截器造成的?

我确实注意到一些由扩展引起的违规行为会在源文件中列为 chrome-扩展,所以不确定这是否是由于扩展造成的。我确实注意到的一件事是,如果报告有一个被阻止的 uri,它不在默认 src 的允许列表中,则违反的指令将是一个 frame-src(它应该默认为 default-src,那里没有域所以违反预期)。但是如果报告的 uri 在允许列表中被阻止,则违反指令和有效指令将是 img-src(它也应该默认为默认值,但可能在那里看不到白名单域)

示例报告

{"linenumber":"",
"request":"",
"documenturi":"mysite.com",
"originalpolicy":"default-src 'self' mysite.com *.redirectsite.com redirectsite.com; style-src 'nonce-d93e18cc'; report-uri /csp-reports",
"violateddirective":"img-src",
"statuscode":"200",
"referrer":"",
"scriptsample":"",
"effectivedirective":"img-src",
"columnnumber":"",
"requestheaders":"",
"blockeduri":"https://x.redirectsite.com/s........",
"sourcefile":""}



有人有这方面的经验吗?

最终从 content-security-policy-report-only 切换到 content-security-policy header,即使看到这些状态代码 200 违规。切换后,仍然看到状态码 0 违规,但状态码 200 消失了。也许这是浏览器如何支持 content-security-policy-report-only header 的错误。但最终解决了这个用例。希望这对其他人有帮助