content_security_policy
| Typ | String |
|---|---|
| Erforderlich | Nein |
| Manifest-Version | 2 oder höher |
| Beispiel |
Manifest V2:
json json |
Erweiterungen haben standardmäßig eine Content Security Policy (CSP) zugewiesen. Die Standardrichtlinie schränkt die Quellen ein, von denen Erweiterungen Code laden können (wie <script> Ressourcen) und verbietet potenziell unsichere Praktiken wie die Verwendung von eval(). Siehe Standard-Content-Sicherheitsrichtlinie, um mehr über die Auswirkungen dieser zu erfahren.
Sie können den Manifest-Schlüssel "content_security_policy" verwenden, um die Standardrichtlinie zu lockern oder zu verschärfen. Dieser Schlüssel wird auf die gleiche Weise spezifiziert wie der HTTP-Header Content-Security-Policy. Siehe Verwendung von Content-Security-Policy für eine allgemeine Beschreibung der CSP-Syntax.
Zum Beispiel können Sie diesen Schlüssel verwenden, um:
- Zugelassene Quellen für andere Arten von Inhalten wie Bilder und Stylesheets mit der entsprechenden Richtliniendirektive einzuschränken.
- Der Erweiterung erlauben, WebAssembly zu nutzen, indem die Quelle
'wasm-unsafe-eval'in diescript-src-Direktive aufgenommen wird. - Die Standardrichtlinien
script-src(nur Manifest V2) lockern:- Der Erweiterung erlauben, Skripte von außerhalb ihres Pakets zu laden, indem deren URL in der
script-src-Direktive angegeben wird. - Der Erweiterung erlauben, Inline-Skripte auszuführen, indem der Hash des Skripts in der
script-src-Direktive angegeben wird. - Der Erweiterung erlauben,
eval()und ähnliche Funktionen zu verwenden, indem'unsafe-eval'in derscript-src-Direktive aufgenommen wird.
- Der Erweiterung erlauben, Skripte von außerhalb ihres Pakets zu laden, indem deren URL in der
Es gibt Einschränkungen bezüglich der Richtlinie, die Sie mit diesem Manifest-Schlüssel spezifizieren können:
- Die
script-src-Direktive muss mindestens das'self'-Schlüsselwort enthalten und darf nur sichere Quellen enthalten. Der Satz zugelassener sicherer Quellen unterscheidet sich zwischen Manifest V2 und Manifest V3. - Die Richtlinie darf
default-srcalleine beinhalten (ohnescript-src), wenn ihre Quellen die Anforderungen für diescript-src-Direktive erfüllen. - Das
object-src-Schlüsselwort könnte erforderlich sein, siehe object-src-Direktive für Details. - Direktiven, die auf Code verweisen –
script-src,script-src-elem,worker-srcunddefault-src(falls als Fallback verwendet) – teilen die gleiche Anforderung für sichere Quellen. Es gibt keine Einschränkungen für CSP-Direktiven, die nicht Skript-Inhalte betreffen, wieimg-src.
In Manifest V3 sind alle CSP-Quellen, die sich auf externe oder nicht-statische Inhalte beziehen, in CSP-Direktiven, die Skript-Inhalte betreffen, verboten. Die einzigen zugelassenen Werte sind 'none', 'self' und 'wasm-unsafe-eval'. Es gibt eine Ausnahme für Skripte von localhost während der Entwicklung; siehe Skripte von localhost in der Content Security Policy für mehr Informationen.
In Manifest V2 gilt eine Quelle für eine Skript-Direktive als sicher, wenn sie diesen Kriterien entspricht:
- Platzhalter-Hosts sind nicht erlaubt, wie
"script-src 'self' *". - Entfernte Quellen müssen
https:-Schemata verwenden. - Entfernte Quellen dürfen keine Platzhalter für Domains in der Public Suffix Liste verwenden (so dass
*.co.ukund*.blogspot.comnicht erlaubt sind, obwohl*.foo.blogspot.comerlaubt ist). - Alle Quellen müssen einen Host angeben.
- 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'.
objekt-src-Direktive
Die -Direktive kann in einigen Browsern erforderlich sein, die veraltete Plugins unterstützen und sollte, falls benötigt, auf eine sichere Quelle wie object-src'none' gesetzt werden. Dies könnte für Browser bis 2022 notwendig sein.
- In Firefox ist
"object-src"ab Firefox 106 optional. In früheren Versionen wird, falls"object-src"nicht spezifiziert 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 die Standardeinstellung ("object-src 'self'") verwendet und eine Warnmeldung protokolliert. - In Safari gibt es keine Anforderung für
"object-src".
Siehe W3C WebExtensions Community Group Problem 204, Entfernen von object-src aus der CSP, für weitere Informationen.
Manifest V2-Syntax
In Manifest V2 wird eine Content-Sicherheitsrichtlinie gegen den Schlüssel wie folgt festgelegt:
"content_security_policy": "default-src 'self'"
Manifest V3-Syntax
In Manifest V3 ist der Key content_security_policy ein Objekt, das eine beliebige dieser Eigenschaften haben kann, die alle optional sind:
| Name | Typ | Beschreibung |
|---|---|---|
extension_pages |
String |
Die Content-Sicherheitsrichtlinie für Erweiterungsseiten. Die script-src und worker-src-Direktiven dürfen nur diese Werte haben:
|
sandbox |
String |
Die Content-Sicherheitsrichtlinie für die sandboxed pages der Erweiterung. |
Beispiele
>Gültige Beispiele
Hinweis: Gültige Beispiele zeigen die korrekte Verwendung von Schlüsseln in CSP. Allerdings sind Erweiterungen mit 'unsafe-eval', entfernten Skripten, Blob oder entfernten Quellen in ihrer CSP nicht für Firefox-Erweiterungen erlaubt gemäß den Erweiterungsrichtlinien und aufgrund erheblicher Sicherheitsprobleme.
Hinweis:
Einige Beispiele enthalten die -Direktive, die Rückwärtskompatibilität für ältere Browserversionen bietet. Siehe object-src-Direktive für mehr Details.object-src
Verlangen, 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'" }
Entfernte Skripte von "https://example.com" erlauben:
-
Manifest V2
json"content_security_policy": "script-src 'self' https://example.com; object-src 'self'" -
Manifest V3 erlaubt keine entfernten URLs in
script-srcvonextension_pages.
Entfernte Skripte von beliebigen Subdomains von "jquery.com" erlauben:
-
Manifest V2
json"content_security_policy": "script-src 'self' https://*.jquery.com; object-src 'self'" -
Manifest V3 erlaubt keine entfernten URLs in
script-srcvonextension_pages.json"content_security_policy": { "extension_pages": "script-src 'self' http://localhost:3000" }Allerdings können Skripte von localhost während der Entwicklung für nicht verpackte Erweiterungen aus Chrome 110 und temporär geladene Erweiterungen aus Firefox 147 erlaubt werden. Siehe Skripte von localhost in der Content Security Policy für mehr Informationen.
eval() und ähnliches erlauben:
-
Manifest V2
json"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';" -
Manifest V3 erlaubt
'unsafe-eval'nicht inscript-src.
Das Inline-Skript erlauben: "<script>alert('Hello, world.');</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-srcvonextension_pages.
Den Rest der Richtlinie beibehalten, aber auch verlangen, dass Bilder mit der Erweiterung verpackt sein sollten:
-
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'" }
Die Verwendung von WebAssembly aktivieren:
-
Manifest V2
Für die Rückwärtskompatibilität 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. Weitere Informationen finden Sie unter WebAssembly auf der Content Security Policy-Seite.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
Richtlinie, die die "object-src"-Direktive auslässt:
"content_security_policy": "script-src 'self' https://*.jquery.com;"
Dies ist jedoch nur in Browsern ungültig, die veraltete Plugins unterstützen. Siehe object-src-Direktive für mehr Details.
Richtlinie, die das "self"-Schlüsselwort in der "script-src"-Direktive auslä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'"
Platzhalter wird mit einer generischen Domain verwendet:
"content_security_policy": "script-src 'self' https://*.blogspot.com; object-src 'self'"
Quelle gibt ein Schema, aber keinen Host an:
"content_security_policy": "script-src 'self' https:; object-src 'self'"
Die Direktive enthält das nicht unterstützte Schlüsselwort 'unsafe-inline':
"content_security_policy": "script-src 'self' 'unsafe-inline'; object-src 'self'"