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' 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'"

瀏覽器相容性