Content-Security-Policy

优质
小牛编辑
126浏览
2023-12-01

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-faceframe-src为使用元素(例如<frame>和)加载的嵌套浏览上下文指定有效来源<iframe>

img-src指定图像和网站图标的有效来源。

manifest-src指定应用程序清单文件的有效来源。

media-src指定使用加载媒体来源有效<audio><video><track>元素。

object-src指定有效的来源<object><embed><applet>元素。

script-src指定JavaScript的有效来源。

style-src指定样式表的有效来源。

worker-src指定有效来源WorkerSharedWorkerServiceWorker脚本。

文件指令

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文档组成POSTreport-toFires 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

  1. 在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实现

  1. Content-Security-Policy-Report-Only

2. WebExtensions中的内容安全性

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