content_security_policy

类型 String
必填
Manifest 版本 2 或更高
示例 Manifest V2
json
"content_security_policy": "default-src 'self'"
Manifest V3
json
"content_security_policy": {
  "extension_pages": "default-src 'self'"
}

扩展默认情况下会应用内容安全策略 (CSP)。默认策略限制了扩展可以加载代码的来源(例如 <script> 资源)并禁止了潜在不安全的做法,例如使用 eval()。请参阅 默认内容安全策略 了解其含义。

您可以使用 "content_security_policy" manifest 键来放宽或收紧默认策略。此键的指定方式与 Content-Security-Policy HTTP 标头相同。请参阅 使用内容安全策略 了解 CSP 语法的通用说明。

例如,您可以使用此键来

  • 使用适当的 策略指令来限制其他类型内容(如图像和样式表)的允许来源。
  • 通过在 script-src 指令中包含 'wasm-unsafe-eval' 来源,允许扩展利用 WebAssembly
  • 放宽默认的 script-src 策略(仅限 Manifest V2)

您可以指定的策略有如下限制

  • script-src 指令必须至少包含 'self' 关键字,并且只能包含安全来源。允许的安全来源集在 Manifest V2 和 Manifest V3 之间有所不同。
  • 如果其来源满足 script-src 指令的要求,则策略可以单独包含 default-src(不包含 script-src)。
  • 可能需要 object-src 关键字,请参阅 object-src 指令 了解详细信息。
  • 引用代码的指令——script-srcscript-src-elemworker-srcdefault-src(如果用作回退)——共享相同的安全来源要求。对于涵盖非脚本内容的 CSP 指令,例如 img-src,则没有限制。

在 Manifest V3 中,所有引用外部或非静态内容的 CSP 来源都被禁止。唯一允许的值是 'none''self''wasm-unsafe-eval'。在 Manifest V2 中,如果脚本指令的来源满足以下标准,则被视为安全:

  • 不允许使用通配符主机,例如 "script-src 'self' *"
  • 远程来源必须使用 https: 方案。
  • 远程来源不得在 公共后缀列表中的任何域中使用通配符(因此不允许 *.co.uk*.blogspot.com,但允许 *.foo.blogspot.com)。
  • 所有来源都必须指定一个主机。
  • 允许的来源方案仅限于 blob:filesystem:moz-extension:https:wss:
  • 允许的 关键字仅限于:'none''self''unsafe-eval''wasm-unsafe-eval'

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 中,有一个内容安全策略,如下所示针对该键进行指定:

json
"content_security_policy": "default-src 'self'"

Manifest V3 语法

在 Manifest V3 中,content_security_policy 键是一个对象,可以包含以下任意属性,所有属性都是可选的:

名称 类型 描述
extension_pages String 用于扩展页面的内容安全策略。script-srcworker-src 指令只能包含以下值:
  • 'self'
  • 'none'
  • 'wasm-unsafe-eval'
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_pagesscript-src 中使用远程 URL。

允许来自“jquery.com”任何子域的远程脚本

  • Manifest V2

    json
    "content_security_policy": "script-src 'self' https://*.jquery.com; object-src 'self'"
    
  • Manifest V3 不允许在 extension_pagesscript-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_pagesscript-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" 指令的策略

json
"content_security_policy": "script-src 'self' https://*.jquery.com;"

但是,这仅在支持过时 插件 的浏览器中无效。有关更多详细信息,请参阅 object-src 指令

"script-src" 指令中省略 "self" 关键字的策略

json
"content_security_policy": "script-src https://*.jquery.com; object-src 'self'"

远程来源的方案不是 https

json
"content_security_policy": "script-src 'self' https://code.jqueryjs.cn; object-src 'self'"

通配符与通用域一起使用

json
"content_security_policy": "script-src 'self' https://*.blogspot.com; object-src 'self'"

来源指定了方案但没有主机

json
"content_security_policy": "script-src 'self' https:; object-src 'self'"

指令包含不支持的关键字 'unsafe-inline'

json
"content_security_policy": "script-src 'self' 'unsafe-inline'; object-src 'self'"

浏览器兼容性