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' 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'"
瀏覽器相容性
載入中…