Content-Security-Policy
HTTP Content-Security-Policy
响应头允许网站管理员控制允许用户代理为给定页面加载的资源。除少数例外,策略主要涉及指定服务器源和脚本端点。这有助于防止跨站点脚本攻击(XSS)。
有关更多信息,另请参阅本文有关内容安全策略(CSP)的文章。
标题类型 | 响应标题 |
---|---|
禁止标题名称 | 没有 |
句法
Content-Security-Policy: <policy-directive>; <policy-directive>
指令
获取指令
提取指令控制可以加载某些资源类型的位置。
child-src
定义Web工作人员的有效来源以及使用元素(例如<frame>
和)加载的嵌套浏览上下文<iframe>
。
connect-src
限制可以使用脚本接口加载的URL default-src
用作其他提取指令的后备。
font-src
指定使用加载的字体的有效来源@font-face
。frame-src
为使用元素(例如<frame>
和)加载的嵌套浏览上下文指定有效来源<iframe>
。
img-src
指定图像和网站图标的有效来源。
manifest-src
指定应用程序清单文件的有效来源。
media-src
指定使用加载媒体来源有效<audio>
,<video>
和<track>
元素。
object-src
指定有效的来源<object>
,<embed>
和<applet>
元素。
script-src
指定JavaScript的有效来源。
style-src
指定样式表的有效来源。
worker-src
指定有效来源Worker
,SharedWorker
或ServiceWorker
脚本。
文件指令
Document指令控制策略适用的文档或工作环境的属性。
base-uri
限制可以在文档<base>
元素中使用的URL 。
plugin-types
通过限制可以加载的资源类型来限制可以嵌入到文档中的一组插件。
sandbox
为请求的资源启用沙箱,类似于<iframe>
sandbox
属性。disown-opener
确保资源在导航时不会泄露其开启者。
导航指令
例如,导航指令控制用户可以导航到哪个位置或将表单提交到哪个位置。
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加载任何资产。
referrer
用于在引用者(sic)头中指定远离页面的链接的信息。
Referrer-Policy
改为使用标题。
require-sri-for
需要在页面上使用SRI作为脚本或样式。
upgrade-insecure-requests
指示用户代理将所有站点的不安全URL(通过HTTP提供的URL)视为已被替换为安全URL(通过HTTPS提供的URL)。此指令适用于需要重写大量不安全的旧版URL的网站。
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:
// headerContent-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
2. WebExtensions中的内容安全性
3. 显示安全和隐私政策在Firefox开发者工具中