内容安全策略 (CSP) URL 似乎没有任何效果。仍举报违规行为

sim*_*w16 6 security nginx http-headers content-security-policy

我有一个 CSP,其中包含以下行:

script-src 'nonce-{random}' 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http: https://static.cloudflareinsights.com https://mydomain.app/cdn-cgi/scripts/6c4dd986/cloudflare-static/email-decode.min.js;
Run Code Online (Sandbox Code Playgroud)

我可以看到页面响应标头中的 CSP 是正确的。

我仍然收到[Report Only] Refused to load the script https://mydomain.app/cdn-cgi/scripts/6c4dd986/cloudflare-static/email-decode.min.js错误。

Cloudflare 会自动注入此脚本标记,因此我不能依赖该strict-dynamic属性来覆盖它,也不能添加随机数。

这是因为scrict-dynamic覆盖 CSP 中的固定 url 而失败吗?我们需要在应用程序内严格动态,但我们还需要在这些情况下允许自定义白名单 URL。

有任何想法吗?

编辑:具体来说,我认为问题出在 cloudflare 上。如何允许 cloudflare 注入脚本,同时具有严格的动态设置?你不能给 cloudflare 一个随机数,而且 strict-dynamic 也不会让你加入白名单,那么如何克服这个问题呢?

Sha*_*ens 0

如果您使用strict-dynamic,它将忽略列入允许列表的域。这就是为什么这种方法行不通的原因。

顺便说一句,无论如何你都不能使用完整的 URL http: https://static.cloudflareinsights.com https://mydomain.app/cdn-cgi/scripts/6c4dd986/cloudflare-static/email-decode.min.js。您只能使用https://static.cloudflareinsights.com https://mydomain.app/cdn-cgi/scripts/6c4dd986/cloudflare-static/.

顺便说一句,您可能会发现https://csp-evaluator.withgoogle.com/对于查找 CSP 中的此类问题很有帮助。(我与他们没有任何关系。我只是认为它很有用。)

最终,Cloudflare 需要自行解决这个问题。他们会在您的回复中看到您的 CSP。他们需要利用你的随机数。他们有时会这样做。如果您阅读https://developers.cloudflare.com/bots/reference/javascript-detections/,它会说:“如果您的 CSP 对脚本标签使用随机数,Cloudflare 会通过解析您的 CSP 将这些随机数添加到它注入的脚本中响应头。”