Content-Security-Policy

Content-Security-Policy

HTTP Content-Security-Policy响应头允许网站管理员控制允许用户代理为给定页面加载的资源。除少数例外,策略主要涉及指定服务器源和脚本端点。这有助于防止跨站点脚本攻击(XSS)。

有关更多信息,另请参阅本文有关内容安全策略(CSP)的文章。

标题类型响应标题
禁止标题名称没有

句法

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

指令

获取指令

提取指令控制可以加载某些资源类型的位置。

child-src定义Web工作人员的有效来源以及使用元素(例如<frame>和)加载的嵌套浏览上下文<iframe>。

文件指令

Document指令控制策略适用的文档或工作环境的属性。

base-uri限制可以在文档<base>元素中使用的URL 。

导航指令

例如,导航指令控制用户可以导航到哪个位置或将表单提交到哪个位置。

form-action限制可以用作来自给定上下文的表单提交的目标的URL。frame-ancestors指定有效的父级可以使用嵌入网页<frame>,<iframe>,<object>,<embed>,或<applet>。navigation-to限制文档可以通过任何方式(a, form, window.location, window.open,等)导航到的URL。

报告指令

报告指令控制着违反CSP的报告流程。另见Content-Security-Policy-Report-Only标题。

report-uri指示用户代理报告违反内容安全策略的企图。这些违规报告由通过HTTP 请求发送到指定URI 的JSON文档组成POSTreport-toFires SecurityPolicyViolationEvent

其他指令

block-all-mixed-content当使用HTTPS加载页面时,防止使用HTTP加载任何资产。

CSP in workers

Workers在一般不是由创建它们的文档(或父worker)的内容安全策略管理。要为 workers 指定内容安全策略Content-Security-Policy,请为请求 workers 脚本本身的请求设置响应标头。

例外情况是,如果workers脚本的来源是全局唯一标识符(例如,如果其 URL 具有数据或 blob 的方案)。在这种情况下,workers 会继承创建它的文档或 workers 的内容安全策略。

多种内容安全策略

CSP允许为资源指定多个策略,包括通过Content-Security-Policy标题,Content-Security-Policy-Report-Only标题和<meta>元素。

您可以Content-Security-Policy多次使用标题,如下例所示。请特别注意connect-src这里的指示。即使第二个策略允许连接,第一个策略也包含在内connect-src 'none'。添加其他策略只能进一步限制受保护资源的功能,这意味着将不允许连接,并且作为最严格的策略connect-src 'none'实施。

Content-Security-Policy: default-src 'self' http://example.com; connect-src 'none'; Content-Security-Policy: connect-src http://example.com/; script-src http://example.com/

示例

示例:禁用不安全的内联/评估,仅允许通过https:

// header Content-Security-Policy: default-src https: // meta tag <meta http-equiv="Content-Security-Policy" content="default-src https:">

示例:预先存在的站点使用过多的内联代码进行修复,但希望确保仅通过 https 加载资源并禁用插件:

Content-Security-Policy: default-src https: 'unsafe-eval' 'unsafe-inline'; object-src 'none'

示例:尚未实施上述政策;而只是报告将会发生的违规行为:

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

有关更多示例,请参阅Mozilla网络安全指南

规范

规范状态评论
内容安全策略3级编辑草稿添加disown-opener,manifest-src,navigation-to,report-to,strict-dynamic,worker-src。取消不推荐使用frame-src。如果报告为废弃,则弃用report-uri。
混合内容候选推荐添加块全混合内容。
子资源完整性建议添加require-sri-for。
升级不安全的请求候选推荐添加升级不安全请求。
内容安全策略2级建议添加base-uri,child-src,表单动作,框架 - 祖先,插件类型,引用链接器,反射-xss和报表 - uri。弃用frame-src。
内容安全策略1.0候选推荐定义connect-src,default-src,font-src,frame-src,img-src,media-src,object-src,report-uri,sandbox,script-src和style-src。

浏览器兼容性

特征ChromeEdgeFirefoxInternet ExplorerOperaSafari
基本支持2511423.021031574
<meta> element 支持(Yes)(Yes)45.0No(Yes)(Yes)
Worker 支持(Yes)?50.0No?No

特征AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基本支持(Yes)(Yes)(Yes)23.0??7.15
<meta> element 支持(Yes)(Yes)(Yes)45.0No(Yes)(Yes)
Worker 支持(Yes)(Yes)?50.0No?No

  • 在Chrome 14中作为X-Webkit-CSP标头实现。

2. 在Firefox 4中作为X-Content-Security-Policy header实施。

3. 作为X-Content-Security-Policy header实现,只支持'sandbox'指令。

4. 在Safari 6中实现为X-Webkit-CSP header。

5. 在iOS 5.1中作为X-Webkit-CSP header实现

  • Content-Security-Policy-Report-Only

2. WebExtensions中的内容安全性

3. 显示安全和隐私政策在Firefox开发者工具中