Cloudflare 不会收集每次页面浏览的数据,而是使用采样方法来高效地收集信息。这意味着流量较少的域名可能需要更长时间才能生成初始报告,因为这些域名需要更多的页面浏览量来积累足够的样本。为了加快报告过程,建议您在激活客户端资源监控后主动为您的应用程序生成流量。这将为 Cloudflare 提供更多数据,从而加快报告生成速度。
您可以采取其他步骤来排查此问题:
- 验证客户端资源监控是否已开启。
- 启用客户端资源监控并为应用程序生成一定流量(至少 100 个请求)后,请等待约一小时,以确保 Cloudflare 已收集和处理足够的数据以显示在客户端资源监控仪表板中。
- 使用浏览器的开发者工具(网络选项卡)检查
content-security-policy-report-onlyHTTP 标头是否存在。 - 使用分析仪表板验证流量是否由 Cloudflare 代理。
- 检查响应中是否存在重复或冲突的内容安全策略 (CSP) 标头。您的源站服务器可能正在向响应中添加 CSP 标头。
脚本通常会引用您的应用程序以外的其他脚本。
但是,如果您在资源监控仪表板上看到意外的脚本,请检查它们是否有恶意活动的迹象。
Cloudflare 使用内容安全策略 (CSP)仅报告指令来收集在您的应用程序中运行的所有脚本的列表。
某些浏览器会将被报告的脚本显示为其开发者工具控制台窗格中的警告。例如:
[Report Only] Refused to execute inline script because it violates
the following Content Security Policy directive: "script-src 'none'".
Either the 'unsafe-inline' keyword, a hash ('sha256-RFWPLDbv2BY+rCkDzsE+0fr8ylGr2R2faWMhq4lfEQc='), or a nonce ('nonce-...')
is required to enable inline execution.您可以安全地忽略这些警告,因为它们与 Cloudflare 检测已加载脚本所需的报告相关。更多信息请参阅客户端安全的工作原理。
通过 CSP 的仅报告指令报告的规则违规不会考虑任何重定向或重定向 HTTP 状态码。出于安全原因,这是设计如此 ↗。
您可能希望在允许规则中涵盖的某些第三方服务会执行重定向。此类服务的一个示例是 Google Ads,它与 CSP 策略配合使用效果不佳 ↗。
例如,如果您将 adservice.google.com 域名添加到允许规则,您可能会因重定向到其他域名(不在您的允许规则中)而收到该域名的规则违规报告。在这种情况下,违规报告仍会提及原始域名,而非重定向目标的域名,这可能会引起一些混淆。
要尝试解决此问题,请将重定向目标的域名添加到您的允许规则中。由于可能存在多次重定向,您可能需要向规则中添加多个域名。
如果违规报告引用的域名属于用户同意管理或行为追踪服务,则访客浏览器上安装的广告屏蔽扩展程序很可能是原因所在。
这些扩展程序通常会屏蔽对此类域名的请求,通常是将其重定向到本地资源,而不是让其到达目标域名。由于违规报告提及的是页面请求的原始域名,而非被屏蔽或重定向的目标域名,因此您可能会看到已加入白名单的域名的违规报告。
由于只有安装了这些扩展程序的访客才会触发此行为,因此与您网站的整体流量相比,违规报告相对较少。
如果您运营了一个带有自定义主机名的 SSL for SaaS 根区域,并且您配置了一个使用 'self' 关键字的内容安全规则的范围警报,您将收到在根区域下所有自定义主机名上检测到的资源的警报,而不仅仅是您自己的应用程序界面。
这是预期行为:
- SSL for SaaS 将您的根区域的内容安全规则应用于在其下提供服务的每个自定义主机名。
- CSP 指令中的
'self'关键字与正在提供服务的请求的主机名匹配。当自定义主机名加载其自己的脚本时,这些脚本会匹配'self',从而触发范围警报。
在 SaaS 规模下,这可能会在您不管理的主机名上产生大量警报,并使您难以隔离自己的合规审计范围(例如,您收集持卡人数据的特定页面)。
目前没有办法将内容安全规则的范围仅限于根区域,排除自定义主机名。如果您只需要监控自己的应用程序界面,请考虑以下方法之一:
- 使用仅匹配您控制的特定页面路径的内容安全规则表达式(例如,您收集持卡人数据的请求路径)。
- 将
'self'替换为您控制的主机名的显式列表。请注意,这在 SaaS 规模下很少可行,因为 CSP 标头有实际大小限制。 - 如果以上两种方法都不适用,请联系您的客户团队,追踪对将内容安全规则范围限制在 SaaS 根区域的需求。
如果您配置了内容安全规则,但预期的 CSP 标头未被添加到响应中,Transform Rules 可能在评估内容安全规则之前正在重写请求路径。
Cloudflare 按特定顺序评估不同阶段的规则。URL Rewrite Rules 在请求生命周期的早期运行,而内容安全规则在响应阶段的稍后进行评估。
这意味着,如果您的内容安全规则根据请求 URI 路径(例如,使用字段 http.request.uri.path)匹配传入请求,则内容安全规则将针对重写后的路径进行评估,而非访客请求的原始 URI 路径。
要解决此问题,请选择以下方法之一:
-
更新内容安全规则条件以匹配重写后的路径:将您规则的表达式更改为匹配重写后的 URI 路径,而非访客的原始 URI 路径。
-
使用原始字段匹配原始 URI 路径:在内容安全规则表达式中使用
raw.http.request.uri.path字段,而非http.request.uri.path字段。原始字段保留原始请求值,不受 Transform Rules 影响。
排查此问题时,可以考虑使用 Cloudflare Trace 来验证请求路径在不同阶段的变化。
如果响应中存在重复的 Content-Security-Policy 或 Content-Security-Policy-Report-Only 标头,这很可能是由于客户端安全和响应标头转换规则同时添加了相同类型的标头。
内容安全规则会自动向响应中添加 CSP 标头:
如果您配置了使用Add(添加) 操作添加相同类型标头的响应标头转换规则,则两个标头都会出现在响应中。
当浏览器遇到多个 CSP 标头时,它们会强制执行所有标头,并且限制最严格的策略优先生效。这可能导致合法资源被意外阻止。
如果您需要将响应标头转换规则与客户端安全策略一起使用,请使用Set static(设置静态值) 或Set dynamic(设置动态值) 操作。这些操作会替换任何现有的标头值,包括由 Cloudflare 客户端安全添加的标头。使用这些操作将使您的转换规则优先于客户端安全。
按照以下步骤排查此问题:
- 使用浏览器的开发者工具(网络选项卡)检查响应标头,查看是否存在重复的 CSP 标头。
- 查看您配置的响应标头转换规则,检查是否有任何规则正在对
Content-Security-Policy或Content-Security-Policy-Report-Only标头使用Add(添加) 操作。 - 如果您希望转换规则覆盖客户端安全的 CSP 标头,请将操作从Add(添加) 更改为Set static(设置静态值) 或Set dynamic(设置动态值)。
- 或者,禁用或调整内容安全规则的范围,以避免与转换规则重叠。
| 场景 | 推荐方法 |
|---|---|
| 客户端安全管理所有 CSP 标头 | 不要为 CSP 标头创建响应标头转换规则。 |
| 转换规则管理所有 CSP 标头 | 使用Set static(设置静态值) 或Set dynamic(设置动态值) 操作,并考虑将受影响的路径从内容安全规则中排除。 |
| 不同路径使用不同的 CSP 标头 | 使用内容安全规则条件来定位特定路径,并避免与转换规则重叠。 |