content_security_policy
类型 | 字符串 |
---|---|
必填 | 否 |
清单版本 | 2 或更高版本 |
示例 | 清单 V2 json
json
|
扩展默认应用内容安全策略 (CSP)。默认策略限制了扩展可以加载代码的来源(例如 <script> 资源),并禁止诸如使用 eval()
等潜在的不安全操作。请参阅 默认内容安全策略,以了解有关此影响的更多信息。
您可以使用 "content_security_policy"
清单键来放松或收紧默认策略。此键的指定方式与 Content-Security-Policy HTTP 标头相同。请参阅 使用内容安全策略 以获取 CSP 语法的常规说明。
例如,您可以使用此键来
- 使用相应的 策略指令 限制其他类型内容(如图像和样式表)的允许来源。
- 允许扩展通过在
script-src
指令中包含'wasm-unsafe-eval'
源来利用 WebAssembly。 - 放松默认的
script-src
策略(仅限清单 V2)- 允许扩展通过在
script-src
指令中提供其 URL 来加载其包外部的脚本。 - 允许扩展通过 在
script-src
指令中提供脚本的哈希值 来执行内联脚本。 - 允许扩展通过在
script-src
指令中包含'unsafe-eval'
来使用eval()
和类似的功能。
- 允许扩展通过在
使用此清单键可以指定的策略存在一些限制
script-src
指令必须包含至少'self'
关键字,并且只能包含安全来源。清单 V2 和清单 V3 之间允许的安全来源集有所不同。- 如果其来源满足
script-src
指令的要求,则策略可以仅包含default-src
(不带script-src
)。 - 可能需要
object-src
关键字,请参阅 object-src 指令 以获取详细信息。 - 引用代码的指令 –
script-src
、script-src-elem
、worker-src
和default-src
(如果用作回退)– 共享相同安全源要求。对涵盖非脚本内容的 CSP 指令(例如img-src
)没有限制。
在清单 V3 中,所有引用外部或非静态内容的 CSP 源都被禁止。唯一允许的值是 'none'
、'self'
和 'wasm-unsafe-eval'
。在清单 V2 中,如果脚本指令的源满足以下条件,则被视为安全
object-src 指令
在某些支持已弃用 插件 的浏览器中,可能需要
指令,如果需要,应将其设置为安全源,例如 object-src
'none'
。对于 2022 年之前的浏览器,这可能是必需的。
- 在 Firefox 中,从 Firefox 106 开始
"object-src"
是可选的。在早期版本中,如果未指定"object-src"
,则忽略"content_security_policy"
并使用默认 CSP。 - 在 Chrome 中,需要
"object-src"
。如果它丢失或被认为不安全,则使用默认值("object-src 'self'"
)并记录警告消息。 - 在 Safari 中,不需要
"object-src"
。
请参阅 W3C WebExtensions 社区组 问题 204,从 CSP 中删除 object-src,以获取更多信息。
清单 V2 语法
在清单 V2 中,针对此键指定一个内容安全策略,如下所示
"content_security_policy": "default-src 'self'"
清单 V3 语法
在清单 V3 中,content_security_policy
键是一个对象,可以具有以下任何属性,所有属性都是可选的
名称 | 类型 | 描述 |
---|---|---|
extension_pages |
字符串 |
用于扩展页面的内容安全策略。script-src 和 worker-src 指令只能具有以下值
|
sandbox |
字符串 |
用于沙盒化扩展页面的内容安全策略。 |
示例
有效示例
注意:有效示例演示了在 CSP 中正确使用键的方法。但是,根据 附加组件策略 以及由于存在重大安全问题,不允许扩展在其 CSP 中使用 'unsafe-eval'、远程脚本、blob 或远程源。
注意:某些示例包括 object-src
指令,该指令为旧版浏览器提供向后兼容性。有关更多详细信息,请参阅 object-src 指令。
要求所有类型的內容都應與擴展程式一起打包
- 清单 V2json
"content_security_policy": "default-src 'self'"
- 清单 V3json
"content_security_policy": { "extension_pages": "default-src 'self'" }
允許來自 "https://example.com" 的遠端指令碼
- 清单 V2json
"content_security_policy": "script-src 'self' https://example.com; object-src 'self'"
- 清单 V3 不允许在
extension_pages
的script-src
中使用远程 URL。
允许来自“jquery.com”任何子域的远程脚本
- 清单 V2json
"content_security_policy": "script-src 'self' https://*.jquery.com; object-src 'self'"
- 清单 V3 不允许在
extension_pages
的script-src
中使用远程 URL。
- 清单 V2json
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';"
- Manifest V3 不允许在
script-src
中使用'unsafe-eval'
。
允许内联脚本:"<script>alert('Hello, world.');</script>"
- 清单 V2json
"content_security_policy": "script-src 'self' 'sha256-qznLcsROx4GACP2dm0UCKCzCG+HiZ1guq6ZZDob/Tng='; object-src 'self'"
- Manifest V3 不允许在
extension_pages
的script-src
中使用 CSP 哈希值。
保留策略的其余部分,但同时要求图像应与扩展程序打包在一起
- 清单 V2json
"content_security_policy": "script-src 'self'; object-src 'self'; img-src 'self'"
- 清单 V3json
"content_security_policy": { "extension_pages": "script-src 'self'; img-src 'self'" }
启用 WebAssembly 的使用
- Manifest V2 为了向后兼容性,Firefox 中的 Manifest V2 扩展程序可以在不使用
'wasm-unsafe-eval'
的情况下使用 WebAssembly。但是,此行为并非保证。请参阅 Firefox 错误 1770909。因此,建议使用 WebAssembly 的扩展程序在其 CSP 中声明'wasm-unsafe-eval'
。有关更多信息,请参阅内容安全策略页面上的 WebAssembly。json"content_security_policy": "script-src 'self' 'wasm-unsafe-eval'"
- 清单 V3json
"content_security_policy": { "extension_pages": "script-src 'self' 'wasm-unsafe-eval'" }
无效示例
省略 "object-src"
指令的策略
"content_security_policy": "script-src 'self' https://*.jquery.com;"
但是,这仅在支持过时的 插件 的浏览器中无效。有关更多详细信息,请参阅 object-src 指令。
在 "script-src"
指令中省略 "self"
关键字的策略
"content_security_policy": "script-src https://*.jquery.com; object-src 'self'"
远程源的方案不是 https
"content_security_policy": "script-src 'self' http://code.jquery.com; object-src 'self'"
通配符与通用域名一起使用
"content_security_policy": "script-src 'self' https://*.blogspot.com; object-src 'self'"
源指定了方案但没有主机
"content_security_policy": "script-src 'self' https:; object-src 'self'"
指令包含不受支持的关键字 'unsafe-inline'
"content_security_policy": "script-src 'self' 'unsafe-inline'; object-src 'self'"
浏览器兼容性
BCD 表格仅在浏览器中加载