Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

content_security_policy

Typ String
Verpflichtend Nein
Manifest-Version 2 oder höher
Beispiel Manifest V2:
json
"content_security_policy": "default-src 'self'"
Manifest V3:
json
"content_security_policy": {
  "extension_pages": "default-src 'self'"
}

Erweiterungen haben standardmäßig eine Content Security Policy (CSP). Die Standardrichtlinie beschränkt die Quellen, von denen Erweiterungen Code laden können (wie beispielsweise <script>-Ressourcen), und verbietet potenziell unsichere Praktiken wie die Verwendung von eval(). Weitere Informationen zu den Implikationen 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. Siehe Verwendung von Content Security Policy für eine allgemeine Beschreibung der CSP-Syntax.

Beispielsweise können Sie diesen Schlüssel verwenden, um:

  • Erlaubte Quellen für andere Inhaltstypen, wie Bilder und Stylesheets, durch die passende Richtliniendirektive zu beschränken.
  • Es der Erweiterung zu ermöglichen, WebAssembly zu nutzen, indem die Quelle 'wasm-unsafe-eval' in die script-src-Direktive aufgenommen wird.
  • Die Standard-script-src-Richtlinien zu lockern (nur Manifest V2):

Es gibt Einschränkungen hinsichtlich der Richtlinie, die Sie mit diesem Manifests-Schlüssel festlegen können:

  • Die script-src-Direktive muss mindestens das 'self'-Schlüsselwort enthalten und darf nur sichere Quellen beinhalten. Die Menge der erlaubten sicheren Quellen variiert zwischen Manifest V2 und Manifest V3.
  • Die Richtlinie kann default-src alleine (ohne script-src) enthalten, wenn ihre Quellen die Anforderungen für die script-src-Direktive erfüllen.
  • Das object-src-Schlüsselwort kann erforderlich sein; siehe object-src-Direktive für weitere Details.
  • Direktiven, die sich auf Code beziehen – script-src, script-src-elem, worker-src und default-src (falls als Fallback verwendet) – teilen die gleichen Anforderungen an sichere Quellen. Es gibt keine Einschränkungen für CSP-Direktiven, die nicht-skriptbasierten Inhalt betreffen, wie img-src.

In Manifest V3 sind alle CSP-Quellen, die sich auf externe oder nicht-statische Inhalte beziehen, in CSP-Direktiven, die Skriptinhalte abdecken, verboten. Die einzigen erlaubten 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 wird eine Quelle für eine Skriptrichtlinie als sicher angesehen, wenn sie folgende Kriterien erfüllt:

  • Platzhalter-Hosts sind nicht erlaubt, wie "script-src 'self' *".
  • Entfernung von Quellen muss https:-Schemata verwenden.
  • Entfernung von Quellen darf keine Platzhalter für Domänen in der öffentlichen Suffixliste verwenden (so sind *.co.uk und *.blogspot.com nicht erlaubt, obwohl *.foo.blogspot.com erlaubt ist).
  • Alle Quellen müssen einen Host angeben.
  • Die einzigen erlaubten Schemata für Quellen sind blob:, filesystem:, moz-extension:, https: und wss:.
  • Die einzigen erlaubten Schlüsselwörter sind: 'none', 'self', 'unsafe-eval' und 'wasm-unsafe-eval'.

object-src-Direktive

Die object-src-Direktive kann in einigen Browsern erforderlich sein, die veraltete Plugins unterstützen, und sollte auf eine sichere Quelle wie 'none' gesetzt werden, falls erforderlich. Dies kann für Browser bis 2022 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 unsicher erscheint, 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, Entfernen von object-src aus der CSP, für mehr Informationen.

Manifest V2-Syntax

In Manifest V2 wird eine Content-Security-Policy gegen den Schlüssel so spezifiziert:

json
"content_security_policy": "default-src 'self'"

Manifest V3-Syntax

In Manifest V3 ist der content_security_policy-Schlüssel ein Objekt, das diese 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:
  • 'self'
  • 'none'
  • 'wasm-unsafe-eval'
sandbox String Die Content-Security-Policy, die für sandkastenbasierte Erweiterungsseiten verwendet wird.

Beispiele

Gültige Beispiele

Hinweis: Gültige Beispiele demonstrieren die korrekte Verwendung von Schlüsseln in der CSP. Allerdings sind Erweiterungen mit 'unsafe-eval', entfernten Skripten, Blobs oder entfernten Quellen in ihrer CSP für Firefox-Erweiterungen gemäß den Add-on-Richtlinien und aufgrund signifikanter Sicherheitsprobleme nicht erlaubt.

Hinweis: Einige Beispiele enthalten die object-src-Direktive, die Abwärtskompatibilität für ältere Browserversionen bietet. Siehe object-src-Direktive für weitere Details.

Fordern Sie, dass alle Inhaltstypen mit der Erweiterung verpackt werden sollten:

  • Manifest V2

    json
    "content_security_policy": "default-src 'self'"
    
  • Manifest V3

    json
    "content_security_policy": {
      "extension_pages": "default-src 'self'"
    }
    

Erlauben Sie entfernte Skripte von "https://example.com":

  • Manifest V2

    json
    "content_security_policy": "script-src 'self' https://example.com; object-src 'self'"
    
  • Manifest V3 erlaubt keine entfernten URLs in script-src von extension_pages.

Erlauben Sie entfernte Skripte von beliebigen Subdomains von "jquery.com":

  • Manifest V2

    json
    "content_security_policy": "script-src 'self' https://*.jquery.com; object-src 'self'"
    
  • Manifest V3 erlaubt keine entfernten URLs in script-src von extension_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 gepackte Erweiterungen in Chrome 110 und temporär geladene Erweiterungen in Firefox 147 auf die Whitelist gesetzt werden. Siehe Skripte von localhost in der Content Security Policy für mehr Informationen.

Erlauben Sie eval() und Ähnliches:

  • Manifest V2

    json
    "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';"
    
  • Manifest V3 erlaubt 'unsafe-eval' nicht in script-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-src von extension_pages.

Behalten Sie den Rest der Richtlinie bei, verlangen aber auch, dass Bilder mit der Erweiterung verpackt 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

    Für die Abwä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. Siehe WebAssembly auf der Content Security Policy-Seite für mehr 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

Richtlinie, die die "object-src"-Direktive auslässt:

json
"content_security_policy": "script-src 'self' https://*.jquery.com;"

Allerdings ist dies 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:

json
"content_security_policy": "script-src https://*.jquery.com; object-src 'self'"

Schema für eine entfernte Quelle ist nicht https:

json
"content_security_policy": "script-src 'self' http://code.jquery.com; object-src 'self'"

Wildcard wird mit einer generischen Domain verwendet:

json
"content_security_policy": "script-src 'self' https://*.blogspot.com; object-src 'self'"

Die Quelle gibt ein Schema an, aber keinen Host:

json
"content_security_policy": "script-src 'self' https:; object-src 'self'"

Direktive enthält das nicht unterstützte Schlüsselwort 'unsafe-inline':

json
"content_security_policy": "script-src 'self' 'unsafe-inline'; object-src 'self'"

Browser-Kompatibilität