content_security_policy

类型 字符串
必填
清单版本 2 或更高版本
示例 清单 V2
json
"content_security_policy": "default-src 'self'"
清单 V3
json
"content_security_policy": {
  "extension_pages": "default-src 'self'"
}

扩展默认应用内容安全策略 (CSP)。默认策略限制了扩展可以加载代码的来源(例如 <script> 资源),并禁止诸如使用 eval() 等潜在的不安全操作。请参阅 默认内容安全策略,以了解有关此影响的更多信息。

您可以使用 "content_security_policy" 清单键来放松或收紧默认策略。此键的指定方式与 Content-Security-Policy HTTP 标头相同。请参阅 使用内容安全策略 以获取 CSP 语法的常规说明。

例如,您可以使用此键来

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

使用此清单键可以指定的策略存在一些限制

在清单 V3 中,所有引用外部或非静态内容的 CSP 源都被禁止。唯一允许的值是 'none''self''wasm-unsafe-eval'。在清单 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 社区组 问题 204,从 CSP 中删除 object-src,以获取更多信息。

清单 V2 语法

在清单 V2 中,针对此键指定一个内容安全策略,如下所示

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

清单 V3 语法

在清单 V3 中,content_security_policy 键是一个对象,可以具有以下任何属性,所有属性都是可选的

名称 类型 描述
extension_pages 字符串 用于扩展页面的内容安全策略。script-srcworker-src 指令只能具有以下值
  • 'self'
  • 'none'
  • 'wasm-unsafe-eval'
sandbox 字符串 用于沙盒化扩展页面的内容安全策略。

示例

有效示例

注意:有效示例演示了在 CSP 中正确使用键的方法。但是,根据 附加组件策略 以及由于存在重大安全问题,不允许扩展在其 CSP 中使用 'unsafe-eval'、远程脚本、blob 或远程源。

注意:某些示例包括 object-src 指令,该指令为旧版浏览器提供向后兼容性。有关更多详细信息,请参阅 object-src 指令

要求所有类型的內容都應與擴展程式一起打包

  • 清单 V2
    json
    "content_security_policy": "default-src 'self'"
    
  • 清单 V3
    json
    "content_security_policy": {
      "extension_pages": "default-src 'self'"
    }
    

允許來自 "https://example.com" 的遠端指令碼

  • 清单 V2
    json
    "content_security_policy": "script-src 'self' https://example.com; object-src 'self'"
    
  • 清单 V3 不允许在 extension_pagesscript-src 中使用远程 URL。

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

  • 清单 V2
    json
    "content_security_policy": "script-src 'self' https://*.jquery.com; object-src 'self'"
    
  • 清单 V3 不允许在 extension_pagesscript-src 中使用远程 URL。

允许 eval() 及其相关函数

  • 清单 V2
    json
    "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';"
    
  • Manifest V3 不允许在 script-src 中使用 'unsafe-eval'

允许内联脚本:"<script>alert('Hello, world.');</script>"

  • 清单 V2
    json
    "content_security_policy": "script-src 'self' 'sha256-qznLcsROx4GACP2dm0UCKCzCG+HiZ1guq6ZZDob/Tng='; object-src 'self'"
    
  • Manifest V3 不允许在 extension_pagesscript-src 中使用 CSP 哈希值。

保留策略的其余部分,但同时要求图像应与扩展程序打包在一起

  • 清单 V2
    json
    "content_security_policy": "script-src 'self'; object-src 'self'; img-src 'self'"
    
  • 清单 V3
    json
    "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'"
    
  • 清单 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' http://code.jquery.com; 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'"

浏览器兼容性

BCD 表格仅在浏览器中加载