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 schränkt die Quellen ein, von denen Erweiterungen Code laden können (z. B. <script>-Ressourcen), und verbietet potenziell unsichere Praktiken wie die Verwendung von eval(). Weitere Informationen über die Auswirkungen finden Sie unter Standard-Content-Security-Policy.
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 Content-Security-Policy HTTP-Header. Eine allgemeine Beschreibung der CSP-Syntax finden Sie unter Verwendung von Content Security Policy.
Sie können beispielsweise diesen Schlüssel verwenden, um:
- Zulässige Quellen für andere Arten von Inhalten wie Bilder und Stylesheets mit der entsprechenden Richtliniendirektive zu beschränken.
- Der Erweiterung die Nutzung von WebAssembly zu ermöglichen, indem die Quelle
'wasm-unsafe-eval'in diescript-src-Direktive aufgenommen wird. - Die standardmäßigen
script-src-Richtlinien zu lockern (nur Manifest V2):- Der Erweiterung erlauben, Skripte von außerhalb ihres Pakets zu laden, indem Sie deren URL in der
script-src-Direktive angeben. - 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 Sie deren URL in der
Es gibt Einschränkungen für die 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 zulässigen sicheren Quellen unterscheidet sich zwischen Manifest V2 und Manifest V3. - Die Richtlinie darf allein
default-src(ohnescript-src) enthalten, wenn deren Quellen die Anforderungen für diescript-src-Direktive erfüllen. - Das Schlüsselwort
object-srckann erforderlich sein. Weitere Details finden Sie in der object-src-Direktive. - Direktiven, die sich auf Code beziehen –
script-src,script-src-elem,worker-srcunddefault-src(falls als Fallback verwendet) – teilen die gleichen Anforderungen an sichere Quellen. Es gibt keine Einschränkungen für CSP-Direktiven, die nicht auf Skriptinhalte abzielen, 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 gilt eine Quelle für eine Skript-Direktive als sicher, wenn sie folgende Kriterien erfüllt:
- Platzhalter-Hosts sind nicht erlaubt, wie z. B.
"script-src 'self' *". - Externe Quellen müssen
https:-Schemata verwenden. - Externe Quellen dürfen keine Platzhalter für Domains in der Public Suffix List verwenden (sodass
*.co.ukund*.blogspot.comnicht erlaubt sind, obwohl*.foo.blogspot.comerlaubt ist). - Alle Quellen müssen einen Host spezifizieren.
- Die einzigen zulässigen Schemata für Quellen sind
blob:,filesystem:,moz-extension:,https:undwss:. - Die einzigen zulässigen 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 für Browser bis 2022 erforderlich 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. Fehlt es oder wird es als unsicher angesehen, wird die Standardeinstellung ("object-src 'self'") verwendet und eine Warnmeldung protokolliert. - In Safari gibt es keine Anforderung für
"object-src".
Weitere Informationen finden Sie in der W3C WebExtensions Community Group Issue 204, Entfernen Sie object-src aus der CSP.
Manifest V2-Syntax
In Manifest V2 gibt es eine Content Security Policy, die gegen den Schlüssel wie folgt spezifiziert ist:
"content_security_policy": "default-src 'self'"
Manifest V3-Syntax
In Manifest V3 ist der content_security_policy-Schlüssel ein Objekt, das die folgenden Eigenschaften haben kann, alle optional:
| Name | Typ | Beschreibung |
|---|---|---|
extension_pages |
String |
Die Content Security Policy, die für Erweiterungsseiten verwendet wird. Die script-src- und worker-src-Direktiven dürfen nur diese Werte haben:
|
sandbox |
String |
Die Content Security Policy, die für sandboxed Erweiterungsseiten verwendet wird. |
Beispiele
>Gültige Beispiele
Hinweis: Gültige Beispiele zeigen die korrekte Verwendung von Schlüsseln in CSP. Erweiterungen mit 'unsafe-eval', Remote-Skript, Blob oder Remote-Quellen in ihrer CSP sind jedoch gemäß den Add-on-Richtlinien und aufgrund erheblicher Sicherheitsprobleme bei Firefox-Erweiterungen nicht erlaubt.
Hinweis:
Einige Beispiele enthalten die -Direktive, die die Abwärtskompatibilität für ältere Browserversionen bietet. Weitere Informationen finden Sie in der object-src-Direktive.object-src
Erfordern Sie, dass alle Arten von Inhalten mit der Erweiterung gepackt werden:
-
Manifest V2
json"content_security_policy": "default-src 'self'" -
Manifest V3
json"content_security_policy": { "extension_pages": "default-src 'self'" }
Erlauben Sie Remoteskripte von "https://example.com":
-
Manifest V2
json"content_security_policy": "script-src 'self' https://example.com; object-src 'self'" -
Manifest V3 erlaubt keine Remote-URLs in
script-srcvonextension_pages.
Erlauben Sie Remoteskripte von allen Subdomains von "jquery.com":
-
Manifest V2
json"content_security_policy": "script-src 'self' https://*.jquery.com; object-src 'self'" -
Manifest V3 erlaubt keine Remote-URLs in
script-srcvonextension_pages.
Erlauben Sie eval() und Freunde:
-
Manifest V2
json"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';" -
Manifest V3 erlaubt keine
'unsafe-eval'inscript-src.
Erlauben Sie das Inline-Skript: "<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.
Behalten Sie den Rest der Richtlinie bei, erfordern jedoch, dass Bilder mit der Erweiterung gepackt werden:
-
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 Verwendung von WebAssembly:
-
Manifest V2
Aus Gründen der Abwärtskompatibilität können Manifest V2-Erweiterungen in Firefox WebAssembly ohne Verwendung von
'wasm-unsafe-eval'verwenden. Dieses Verhalten ist jedoch nicht garantiert. Siehe Firefox-Fehler 1770909. Erweiterungen, die WebAssembly verwenden, werden daher aufgefordert,'wasm-unsafe-eval'in ihrer CSP zu deklarieren. Weitere Informationen finden Sie auf der Seite Content Security Policy unter 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'" }
Ungültige Beispiele
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 finden Sie in der object-src-Direktive.
Richtlinie, die das Schlüsselwort "self" in der "script-src"-Direktive weglässt:
"content_security_policy": "script-src https://*.jquery.com; object-src 'self'"
Schema für eine externe 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 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
Loading…