Content-Security-Policy-Report-Only
HTTP Content-Security-Policy-Report-Only
响应头允许Web开发人员通过监视(但不强制执行)其效果来实验策略。这些违规报告由通过HTTP 请求发送到指定URI 的JSON文档组成POST
。
有关更多信息,另请参阅本文有关内容安全策略(CSP)的文章。
标题类型 | 响应标题 |
---|---|
禁止标题名称 | 没有 |
| This header is not supported inside a <meta> element. |
句法
Content-Security-Policy-Report-Only: <policy-directive>; <policy-directive>
指令
Content-Security-Policy
标题的指令也可以应用于Content-Security-Policy-Report-Only
。
CSP report-uri
指令应该与这个标题一起使用,否则这个标题将是一个昂贵的不操作机器。
示例
标题报告可能发生的违规行为。您可以使用它来反复处理您的内容安全策略。您可以观察您的网站的行为,监视违规报告,然后选择Content-Security-Policy
标题实施的所需策略。
Content-Security-Policy-Report-Only: default-src https:; report-uri /csp-violation-report-endpoint/
如果您仍然希望接收报告,但也希望强制执行策略,请在report-uri
指令中使用Content-Security-Policy
标题。
Content-Security-Policy: default-src https:; report-uri /csp-violation-report-endpoint/
违规报告语法
报告JSON对象包含以下数据:
document-uri
发生违规的文档的URI。
referrer
违规发生的文件的推荐人。
blocked-uri
内容安全策略阻止加载的资源的URI。如果阻止的URI来自与document-uri不同的来源,则阻止的URI将被截断以仅包含方案,主机和端口。
violated-directive
违反政策部分的名称。
original-policy
由Content-Security-Policy
HTTP header.disposition 指定的原始策略根据是否使用Content-Security-Policy
标题或Content-Security-Header-Report-Only
标题而“enforce”或“reporting” 。
示例违规报告
让我们考虑一个位于http://example.com/signup.html
的页面。它使用以下策略,禁止除了样式表之外的所有内容cdn.example.com
。
Content-Security-Policy-Report-Only: default-src 'none'; style-src cdn.example.com; report-uri /_/csp-reports
HTML的signup.html
外观如下所示:
<!DOCTYPE html><html> <head> <title>Sign Up</title> <link rel="stylesheet" href="css/style.css"> </head> <body> ... Content ... </body></html>
你能发现违规行为吗?样式表只允许加载cdn.example.com
,但网站尝试从它自己的原点加载一个(http://example.com
)。能够执行CSP的浏览器将下列违规报告作为POST请求发送至http://example.com/_/csp-reports
访问文档时:
{ "csp-report": { "document-uri": "http://example.com/signup.html", "referrer": "", "blocked-uri": "http://example.com/css/style.css", "violated-directive": "style-src cdn.example.com", "original-policy": "default-src 'none'; style-src cdn.example.com; report-uri /_/csp-reports", "disposition": "report" }}
正如您所看到的,报告包含违规资源的完整路径blocked-uri
。这并非总是如此。例如,当signup.html
试图从中加载CSS时http://anothercdn.example.com/stylesheet.css
,浏览器将不包含完整路径,而只包含origin(http://anothercdn.example.com
)。这是为了防止泄露有关跨源资源的敏感信息。
产品规格
规范 | 状态 | 评论 |
---|---|---|
内容安全策略3级 | 编辑草稿 | 没有变化。 |
内容安全策略2级 | 建议 | 初始定义。 |
浏览器兼容性
Feature | Chrome | Firefox | Edge | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic Support | 25 | 23.0 | 14 | 10 | 15 | 7 |
Feature | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
Basic Support | 4.4 | (Yes) | (Yes) | 23.0 | ? | ? | 7.1 |
另请参阅
Content-Security-Policy
- CSP
report-uri
directive
- Content Security in WebExtensions
- Display security and privacy policies In Firefox Developer Tools
- https://report-uri.io – CSP and HPKP reporting
- Hosted CSP reporting for HTTPS migrations