content_security_policy
Typ | String |
---|---|
Verpflichtend | Nein |
Manifest-Version | 2 oder höher |
Beispiel |
Manifest V2:
json
json
|
Erweiterungen haben standardmäßig eine Content Security Policy (CSP), die auf sie angewendet wird. Die Standardrichtlinie beschränkt die Quellen, von denen Erweiterungen Code laden können (wie z.B. <script>
-Ressourcen), und verbietet potenziell unsichere Praktiken wie die Verwendung von eval()
. Weitere Informationen zu den Auswirkungen finden Sie unter Standard-Content-Sicherheitsrichtlinie.
Sie können den Manifest-Schlüssel "content_security_policy"
verwenden, um die Standardrichtlinie zu lockern oder zu verschärfen. Dieser Schlüssel wird in gleicher Weise wie der Content-Security-Policy HTTP-Header angegeben. Siehe Verwendung der Content Security Policy für eine allgemeine Beschreibung der CSP-Syntax.
Beispielsweise können Sie diesen Schlüssel verwenden, um:
- Zulässige Quellen für andere Arten von Inhalten wie Bilder und Stylesheets mit der entsprechenden Policy-Direktive zu beschränken.
- Der Erweiterung zu ermöglichen, WebAssembly zu nutzen, indem die Quelle
'wasm-unsafe-eval'
in diescript-src
-Direktive aufgenommen wird. - Die Standard-
script-src
-Richtlinien zu lockern (nur Manifest V2):- Der Erweiterung zu erlauben, Skripte außerhalb ihres Pakets zu laden, indem Sie deren URL in der
script-src
-Direktive angeben. - Der Erweiterung zu erlauben, Inline-Skripte auszuführen, indem Sie den Hash des Skripts in der
script-src
-Direktive angeben. - Der Erweiterung zu erlauben,
eval()
und ähnliche Funktionen zu verwenden, indem'unsafe-eval'
in diescript-src
-Direktive eingeschlossen wird.
- Der Erweiterung zu erlauben, Skripte außerhalb ihres Pakets zu laden, indem Sie deren URL in der
Es gibt Einschränkungen hinsichtlich der Richtlinie, die Sie mit diesem Manifest-Schlüssel angeben können:
- Die
script-src
-Direktive muss mindestens das Schlüsselwort'self'
enthalten und darf nur sichere Quellen umfassen. Der Satz der erlaubten sicheren Quellen unterscheidet sich zwischen Manifest V2 und Manifest V3. - Die Richtlinie darf
default-src
allein (ohnescript-src
) enthalten, wenn deren Quellen die Anforderungen derscript-src
-Direktive erfüllen. - Das
object-src
-Schlüsselwort kann erforderlich sein; siehe object-src-Direktive für Details. - Direktiven, die sich auf Code beziehen –
script-src
,script-src-elem
,worker-src
unddefault-src
(wenn als Fallback verwendet) – teilen die gleichen Anforderungen an sichere Quellen. Es gibt keine Einschränkungen für CSP-Direktiven, die nicht skriptbezogene Inhalte abdecken, wieimg-src
.
In Manifest V3 sind alle CSP-Quellen, die sich auf externe oder nicht statische Inhalte beziehen, verboten. Die einzigen zulässigen Werte sind 'none'
, 'self'
und 'wasm-unsafe-eval'
.
In Manifest V2 wird eine Quelle für eine Skript-Direktive als sicher angesehen, wenn sie diese Kriterien erfüllt:
- Platzhalter-Hosts sind nicht zulässig, wie
"script-src 'self' *"
. - Entfernte Quellen müssen
https:
-Schemata verwenden. - Entfernte Quellen dürfen keine Platzhalter für Domains in der öffentlichen Suffixliste verwenden (also sind
*.co.uk
und*.blogspot.com
nicht erlaubt, obwohl*.foo.blogspot.com
zulässig ist). - Alle Quellen müssen einen Host spezifizieren.
- Die einzigen erlaubten Schemata für Quellen sind
blob:
,filesystem:
,moz-extension:
,https:
undwss:
. - Die einzigen erlaubten Schlüsselwörter sind:
'none'
,'self'
,'unsafe-eval'
und'wasm-unsafe-eval'
.
object-src-Direktive
Die
-Direktive kann in einigen Browsern erforderlich sein, die veraltete Plugins unterstützen, und sollte bei Bedarf auf eine sichere Quelle wie object-src
'none'
gesetzt werden. Dies kann bis 2022 für Browser notwendig sein.
- In Firefox ist
"object-src"
ab Firefox 106 optional. In früheren Versionen wird, wenn"object-src"
nicht angegeben ist,"content_security_policy"
ignoriert und die Standard-CSP verwendet. - In Chrome ist
"object-src"
erforderlich. Wenn es fehlt oder als unsicher angesehen wird, wird der Standard ("object-src 'self'"
) verwendet und eine Warnmeldung protokolliert. - In Safari gibt es keine Anforderung für
"object-src"
.
Siehe W3C WebExtensions Community Group Issue 204, um object-src aus der CSP zu entfernen, für weitere Informationen.
Manifest V2-Syntax
In Manifest V2 gibt es eine Content Security Policy, die gegen den Schlüssel wie folgt angegeben wird:
"content_security_policy": "default-src 'self'"
Manifest V3-Syntax
In Manifest V3 ist der content_security_policy
-Schlüssel ein Objekt, das beliebige dieser Eigenschaften haben kann, alle optional:
Name | Typ | Beschreibung |
---|---|---|
extension_pages |
String |
Die Content Security Policy für Erweiterungsseiten. Die script-src - und worker-src -Direktiven dürfen nur diese Werte haben:
|
sandbox |
String |
Die Content Security Policy für sandboxed Erweiterungsseiten. |
Beispiele
Gültige Beispiele
Hinweis: Gültige Beispiele demonstrieren den korrekten Gebrauch von Schlüsseln in CSP. Erweiterungen mit 'unsafe-eval', Remote-Skript, Blob oder externen Quellen in ihrer CSP sind jedoch gemäß den Add-on-Richtlinien und aufgrund erheblicher Sicherheitsprobleme für Firefox-Erweiterungen nicht erlaubt.
Hinweis:
Einige Beispiele beinhalten die
-Direktive, die Rückwärtskompatibilität für ältere Browserversionen bietet. Siehe object-src-Direktive für weitere Details.object-src
Erfordern, dass alle Arten von Inhalten mit der Erweiterung verpackt sein sollten:
-
Manifest V2
json"content_security_policy": "default-src 'self'"
-
Manifest V3
json"content_security_policy": { "extension_pages": "default-src 'self'" }
Erlaube Remote-Skripte von "https://example.com":
-
Manifest V2
json"content_security_policy": "script-src 'self' https://example.com; object-src 'self'"
-
Manifest V3 erlaubt keine externen URLs in
script-src
vonextension_pages
.
Erlaubt Remote-Skripte von jedem Subdomain von "jquery.com":
-
Manifest V2
json"content_security_policy": "script-src 'self' https://*.jquery.com; object-src 'self'"
-
Manifest V3 erlaubt keine externen URLs in
script-src
vonextension_pages
.
Erlaube eval()
und Freunde:
-
Manifest V2
json"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';"
-
Manifest V3 erlaubt
'unsafe-eval'
nicht inscript-src
.
Erlaubt das Inline-Skript: "<script>alert('Hallo, Welt.');</script>"
:
-
Manifest V2
json"content_security_policy": "script-src 'self' 'sha256-qznLcsROx4GACP2dm0UCKCzCG+HiZ1guq6ZZDob/Tng='; object-src 'self'"
-
Manifest V3 erlaubt keine CSP-Hashes in
script-src
vonextension_pages
.
Halten Sie den Rest der Richtlinie bei, erfordern jedoch auch, dass Bilder mit der Erweiterung verpackt sind:
-
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'" }
Aktivieren Sie die Nutzung von WebAssembly:
-
Manifest V2
Um die Rückwärtskompatibilität zu gewährleisten, können Manifest V2-Erweiterungen in Firefox WebAssembly ohne die Verwendung von
'wasm-unsafe-eval'
verwenden. Dieses Verhalten ist jedoch nicht garantiert. Siehe Firefox Bug 1770909. Erweiterungen, die WebAssembly verwenden, werden daher ermutigt,'wasm-unsafe-eval'
in ihrer CSP zu deklarieren. Siehe WebAssembly auf der Content Security Policy-Seite für weitere Informationen.json"content_security_policy": "script-src 'self' 'wasm-unsafe-eval'"
-
Manifest V3
json"content_security_policy": { "extension_pages": "script-src 'self' 'wasm-unsafe-eval'" }
Ungültige Beispiele
Eine Richtlinie, die die "object-src"
-Direktive weglässt:
"content_security_policy": "script-src 'self' https://*.jquery.com;"
Dies ist jedoch nur in Browsern ungültig, die veraltete Plugins unterstützen. Weitere Details siehe object-src-Direktive.
Eine Richtlinie, die das "self"
-Schlüsselwort in der "script-src"
-Direktive weglässt:
"content_security_policy": "script-src https://*.jquery.com; object-src 'self'"
Das Schema für eine entfernte Quelle ist nicht https
:
"content_security_policy": "script-src 'self' http://code.jquery.com; object-src 'self'"
Es wird ein Platzhalter mit einer generischen Domain verwendet:
"content_security_policy": "script-src 'self' https://*.blogspot.com; object-src 'self'"
Quelle gibt ein Schema an, aber keinen Host:
"content_security_policy": "script-src 'self' https:; object-src 'self'"
Direktive enthält das nicht unterstützte Schlüsselwort 'unsafe-inline'
:
"content_security_policy": "script-src 'self' 'unsafe-inline'; object-src 'self'"
Browser-Kompatibilität
Report problems with this compatibility data on GitHubdesktop | mobile | ||||||
---|---|---|---|---|---|---|---|
content_security_policy | |||||||
extension_pages | |||||||
sandbox |
Legend
Tip: you can click/tap on a cell for more information.
- Full support
- Full support
- No support
- No support
- See implementation notes.