Content-Security-Policy-Report-Only

HTTP Content-Security-Policy-Report-Only响应头允许web开发人员通过监测(但不强制执行)政策的影响来尝试政策。这些违反报告由 JSON 文档组成通过一个HTTP POST请求发送到指定的URI。

更多相关信息, 可参见这篇文章 Content Security Policy (CSP).

Header 类型 Response header
Forbidden header name no
这个header不支持在 <meta> 元素内(定义)。

语法

Content-Security-Policy-Report-Only: <policy-directive>; <policy-directive>

指令

Content-Security-Policy header 的指令也可应用于 Content-Security-Policy-Report-Only.

CSP report-uri 指令需要跟这个header一起用, 否则这个header将会是一个昂贵却无操作(无作用)的机器(设置)。

例子

这个 header 报告(统计)将会发生的违规行为。你可以使用这个header去迭代你的内容安全政策。你观察你的网站的行为,查看违反报告,然后通过 Content-Security-Policy 头选择所需的政策。

Content-Security-Policy-Report-Only: default-src https:; report-uri /csp-violation-report-endpoint/

如果你希望收到报告,而且还想执行一项策略,使用Content-Security-Policy 头跟report-uri 指令.

Content-Security-Policy: default-src https:; report-uri /csp-violation-report-endpoint/

违规报告的语法

报告的JSON对象包括下面的数据:

document-uri
发生违规的文档URI。
referrer
发生违规的文档referrer。
blocked-uri
被内容安全政策阻塞加载的资源的URI。如果被阻塞的URI与文档URI不同源,则被阻塞的URI被截断为只包含scheme(协议),host(域名),和port(端口)。
violated-directive
被违反的策略名。
original-policy
 Content-Security-Policy HTTP 头部所指定的原始策略。
disposition
“执行”或“报告”取决于是使用Content-Security-Policy 头还是使用 Content-Security-Header-Report-Only 头。

违规报告样例

思考一下一个地址为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
signup.html的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 试图从 http://anothercdn.example.com/stylesheet.css加载CSS,浏览器不会包含完整路径,只包含来源。这样做是为了防止泄漏跨域资源的敏感信息。

规范

Specification Status Comment
Content Security Policy Level 3 Working Draft No changes.
Content Security Policy Level 2 Recommendation Initial definition.

浏览器兼容性

Update compatibility data on GitHub
DesktopMobile
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidEdge MobileFirefox for AndroidOpera for AndroidiOS SafariSamsung Internet
Basic supportChrome Full support 25Edge Full support 14Firefox Full support 23IE Full support 10Opera Full support 15Safari Full support 7WebView Android Full support 4.4Chrome Android Full support YesEdge Mobile Full support YesFirefox Android Full support 23Opera Android ? Safari iOS Full support 7.1Samsung Internet Android Full support Yes

Legend

Full support  
Full support
Compatibility unknown  
Compatibility unknown

另请参阅

文档标签和贡献者

此页面的贡献者: Pada
最后编辑者: Pada,