CSP、RocketLoader 和 Nginx?

CSP, RocketLoader and Nginx?

所以我试图避免使用(另一个)页面规则为我的一个子域禁用 Rocketloader,因为我们不能使用正则表达式来 select 单个页面规则下的多个特定子域,免费帐户仅获得 3 页规则。

根据此页面:

https://support.cloudflare.com/hc/en-us/articles/216537517-Using-Content-Security-Policy-CSP-with-Cloudflare

我可以向域中添加一个 header 以允许来自 CloudFlare 的脚本:

add_header Content-Security-Policy "script-src 'self' ajax.cloudflare.com;";

我在该子域的 Nginx 配置中这样做(它实际上是一个 Chronograph 容器),重新启动 Nginx,测试以确保它“接受”,它确实做到了:

但是当我尝试加载域时,它不会加载,检查器显示如下:

不是很熟悉这个,有谁知道我在哪里搞砸了吗?

where I screwed it up?

首先,这里:

I can just add a header to the domain to allow scripts from CloudFlare:
add_header Content-Security-Policy "script-src 'self' ajax.cloudflare.com;";
I did so in the Nginx config

其次,您信任 report-uri 服务,但它让您失望了。

  1. 在将 CSP header 添加到 Nginx 配置之前,您遇到了 ajax.cloudflare.com 的问题(否则,为什么要添加它)。这意味着您已经通过 HTTP header 或元标记 <meta http-equiv= 'Content-Security-Policy'>.
    发布了 CSP 通过将 CSP header 添加到 Nginx 配置,您已将 second 策略添加到页面。
    多个 CSP 用作顺序过滤器 - 所有来源都必须通过两个 CSP 才能解析。第二个 CSP 允许 ajax.cloudflare.com host-source,但第一个仍然禁止它(您在检查器中观察到)。

您必须找出第一个 CSP 的发布位置并将 ajax.cloudflare.com 添加到其中,而不是发布第二个 CSP。

  1. 没有人知道 report-uri 的幕后是什么,如果发布了两个 CSP HTTP header 或一个 HTTP header 与元标记配对,它将如何反应同时
    看看哪个 CSP 以及浏览器实际获得了多少,指南是 here
    如果是 2 个 CSP headers 你会看到类似这样的东西:

如果是 CSP 元标记,您可以通过检查 HTML 代码轻松检查。

我觉得report-uri只是没想到会出现这样的情况。