Content-Security-Policy-Report-Only - HTTP 编辑

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

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

Header 类型Response header
Forbidden header nameno
这个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,浏览器不会包含完整路径,只包含来源。这样做是为了防止泄漏跨域资源的敏感信息。

规范

SpecificationStatusComment
Content Security Policy Level 3Working DraftNo changes.
Content Security Policy Level 2RecommendationInitial definition.

浏览器兼容性

BCD tables only load in the browser

另请参阅

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

词条统计

浏览:166 次

字数:8425

最后编辑:7 年前

编辑次数:0 次

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文