Cloudflare 的内容安全策略问题

Content Security Policy problem with Cloudflare

预知信息:
我使用 Netlify,因此也使用 Netlify 提供的 netlify.toml 文件来清除 CSP 或 HSTS 等内容。
此外,我正在使用 Cloudflare。

问题:
Cloudflare 的 JavaScript Detection 服务将代码注入我的网站。但是由于我的Content Security Policy没有做相应的调整,所以出现如下错误:
Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' ..."
整个错误信息是on the website

当前CSP:
我已尝试相应地调整我的 CSP / script-src。这是我的方法:
script-src 'self' ajax.cloudflare.com cdnjs.cloudflare.com static.cloudflareinsights.com;
default-src 设置为 none。

感谢任何帮助。我还没有尝试在 HTML 脚本中设置 CSP。

因此,导致 CSP 失败的不是链接 Javascript 文件,而是内联 javascript(直接在 rocket loader js 文件之后)。查看正在生成的错误消息,它实际上提供了一些有关允许 CSP 通过的信息 -

Either the 'unsafe-inline' keyword, a hash ('sha256-DHoAlYi+jbDdRYheBA8zRtbuAh9tH4/dMM2Krte5NJM='), or a nonce ('nonce-...') is required to enable inline execution.

看起来 Cloudflare 支持 using the "nonce" method -

If your CSP uses a nonce for script tags, Cloudflare will add these nonces to the scripts it injects by parsing your CSP response header.

更多信息在这里 - https://content-security-policy.com/nonce/

Cloudflare 的 JavaScript 检测服务是一个非常糟糕的功能。如果可以,请将其关闭,因为 CSP 旨在阻止 ISP 进行的此类脚本注入。由于注入的脚本不向 Cloudflare 发送响应,Cloudflare 将浏览器视为不执行 JS 的机器人。

Netlify 是静态文件托管,因此您无法允许使用 'nonce-value' 的内联脚本,只能使用 'hash-value'。但是您无法控制注入的内联脚本,因此任何代码更改都会导致阻塞。
或者忽略此 CSP 违规,它不会导致网站功能中断。

你的问题没有很好的解决办法,只能在Cloudflare提issue,让他们把这个内联脚本迁移到外部脚本,然后加入白名单。

注意:这不是通过 Cloudflare 代理流量时的唯一问题,但任何时候您都可以停止使用 Cloudflare 作为代理并仅将其用作 DNS 服务器。只需按下旁路按钮。