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文档组成POST
。report-to
Fires 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。 |
浏览器兼容性
特征 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
基本支持 | 251 | 14 | 23.02 | 103 | 15 | 74 |
<meta> element 支持 | (Yes) | (Yes) | 45.0 | No | (Yes) | (Yes) |
Worker 支持 | (Yes) | ? | 50.0 | No | ? | No |
特征 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
基本支持 | (Yes) | (Yes) | (Yes) | 23.0 | ? | ? | 7.15 |
<meta> element 支持 | (Yes) | (Yes) | (Yes) | 45.0 | No | (Yes) | (Yes) |
Worker 支持 | (Yes) | (Yes) | ? | 50.0 | No | ? | 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