content_security_policy
| 类型 | String |
|---|---|
| 必填 | 否 |
| Manifest 版本 | 2 或更高 |
| 示例 | Manifest V2 json json |
扩展默认情况下会应用内容安全策略 (CSP)。默认策略限制了扩展可以加载代码的来源(例如 <script> 资源)并禁止了潜在不安全的做法,例如使用 eval()。请参阅 默认内容安全策略 了解其含义。
您可以使用 "content_security_policy" manifest 键来放宽或收紧默认策略。此键的指定方式与 Content-Security-Policy HTTP 标头相同。请参阅 使用内容安全策略 了解 CSP 语法的通用说明。
例如,您可以使用此键来
- 使用适当的 策略指令来限制其他类型内容(如图像和样式表)的允许来源。
- 通过在
script-src指令中包含'wasm-unsafe-eval'来源,允许扩展利用 WebAssembly。 - 放宽默认的
script-src策略(仅限 Manifest V2)- 通过在
script-src指令中提供其 URL,允许扩展加载其包之外的脚本。 - 通过 在
script-src指令中提供脚本的哈希值,允许扩展执行内联脚本。 - 通过在
script-src指令中包含'unsafe-eval',允许扩展使用eval()和类似功能。
- 通过在
您可以指定的策略有如下限制
script-src指令必须至少包含'self'关键字,并且只能包含安全来源。允许的安全来源集在 Manifest V2 和 Manifest V3 之间有所不同。- 如果其来源满足
script-src指令的要求,则策略可以单独包含default-src(不包含script-src)。 - 可能需要
object-src关键字,请参阅 object-src 指令 了解详细信息。 - 引用代码的指令——
script-src、script-src-elem、worker-src和default-src(如果用作回退)——共享相同的安全来源要求。对于涵盖非脚本内容的 CSP 指令,例如img-src,则没有限制。
在 Manifest V3 中,所有引用外部或非静态内容的 CSP 来源都被禁止。唯一允许的值是 'none'、'self' 和 'wasm-unsafe-eval'。在 Manifest 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 社区组的 issue 204,移除 CSP 中的 object-src。
Manifest V2 语法
在 Manifest V2 中,有一个内容安全策略,如下所示针对该键进行指定:
"content_security_policy": "default-src 'self'"
Manifest V3 语法
在 Manifest V3 中,content_security_policy 键是一个对象,可以包含以下任意属性,所有属性都是可选的:
| 名称 | 类型 | 描述 |
|---|---|---|
extension_pages |
String |
用于扩展页面的内容安全策略。script-src 和 worker-src 指令只能包含以下值:
|
sandbox |
String |
用于沙盒化扩展页面的内容安全策略。 |
示例
有效示例
注意: 有效示例演示了 CSP 中键的正确用法。但是,根据 附加组件策略以及重大的安全问题,Firefox 扩展不允许使用 CSP 中的 'unsafe-eval'、远程脚本、blob 或远程来源。
注意: 一些示例包含 指令,它为旧版浏览器提供了向后兼容性。有关更多详细信息,请参阅 object-src 指令。object-src
要求所有类型的内容都应与扩展打包
-
Manifest V2
json"content_security_policy": "default-src 'self'" -
Manifest V3
json"content_security_policy": { "extension_pages": "default-src 'self'" }
允许来自“https://example.com”的远程脚本
-
Manifest V2
json"content_security_policy": "script-src 'self' https://example.com; object-src 'self'" -
Manifest V3 不允许在
extension_pages的script-src中使用远程 URL。
允许来自“jquery.com”任何子域的远程脚本
-
Manifest V2
json"content_security_policy": "script-src 'self' https://*.jquery.com; object-src 'self'" -
Manifest V3 不允许在
extension_pages的script-src中使用远程 URL。
允许 eval() 和类似功能
-
Manifest V2
json"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';" -
Manifest V3 不允许在
script-src中使用'unsafe-eval'。
允许内联脚本:"<script>alert('Hello, world.');</script>"
-
Manifest V2
json"content_security_policy": "script-src 'self' 'sha256-qznLcsROx4GACP2dm0UCKCzCG+HiZ1guq6ZZDob/Tng='; object-src 'self'" -
Manifest V3 不允许在
extension_pages的script-src中使用 CSP 哈希值。
保留策略的其余部分,但同时要求图像应与扩展打包
-
Manifest V2
json"content_security_policy": "script-src 'self'; object-src 'self'; img-src 'self'" -
Manifest V3
json"content_security_policy": { "extension_pages": "script-src 'self'; img-src 'self'" }
启用 WebAssembly 的使用
-
Manifest V2
为了向后兼容,Firefox 中的 Manifest V2 扩展可以使用 WebAssembly 而无需使用
'wasm-unsafe-eval'。但是,此行为不保证。请参阅 Firefox bug 1770909。因此,建议使用 WebAssembly 的扩展在其 CSP 中声明'wasm-unsafe-eval'。有关更多信息,请参阅内容安全策略页面上的 WebAssembly。json"content_security_policy": "script-src 'self' 'wasm-unsafe-eval'" -
Manifest V3
json"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' https://code.jqueryjs.cn; 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'"
浏览器兼容性
加载中…