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 auf sie angewendet wird. Die Standardrichtlinie beschränkt die Quellen, von denen Erweiterungen Code laden können (wie zum Beispiel <script>-Ressourcen) und verbietet potenziell unsichere Praktiken wie die Verwendung von eval(). Weitere Informationen zu den Auswirkungen dieser Richtlinie 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 in der gleichen Weise wie der Content-Security-Policy HTTP-Header angegeben. Für eine allgemeine Beschreibung der CSP-Syntax siehe Verwendung der Content Security Policy.

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

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

Es gibt Einschränkungen bezüglich 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 erlaubter sicherer Quellen unterscheidet sich zwischen Manifest V2 und Manifest V3.
  • Die Richtlinie kann default-src allein (ohne script-src) enthalten, wenn ihre Quellen die Anforderungen für die script-src-Direktive erfüllen.
  • Das Schlüsselwort object-src kann erforderlich sein, siehe object-src Direktive für Details.
  • Direktiven, die sich auf Code beziehen – script-src, script-src-elem, worker-src und default-src (wenn als Fallback verwendet) – teilen die gleiche Anforderung an sichere Quellen. Es gibt keine Einschränkungen für CSP-Direktiven, die nicht-skriptbezogene Inhalte abdecken, wie img-src.

In Manifest V3 sind alle CSP-Quellen, die sich auf externe oder nicht-statische Inhalte beziehen, verboten. Die einzigen erlaubten 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:

  • Platzhalterhosts sind nicht erlaubt, wie zum Beispiel "script-src 'self' *".
  • Entfernte Quellen müssen https:-Schemas verwenden.
  • Entfernte Quellen dürfen keine Platzhalter für Domains aus der öffentlichen Suffixliste verwenden (also sind *.co.uk und *.blogspot.com nicht erlaubt, obwohl *.foo.blogspot.com erlaubt ist).
  • Alle Quellen müssen einen Host angeben.
  • Die einzigen erlaubten Schemas 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 zu einer sicheren Quelle wie 'none' gesetzt werden, falls erforderlich. Dies kann für Browser bis 2022 notwendig sein.

  • In Firefox ist "object-src" optional ab Firefox 106. In früheren Versionen, wenn "object-src" nicht angegeben ist, wird "content_security_policy" ignoriert und die standardmäßige CSP verwendet.
  • In Chrome ist "object-src" erforderlich. Wenn es fehlt oder als unsicher eingestuft wird, wird die Standard-CSP ("object-src 'self'") verwendet und eine Warnmeldung protokolliert.
  • In Safari gibt es keine Anforderung für "object-src".

Weitere Informationen finden Sie im W3C WebExtensions Community Group Issue 204, Entfernen von object-src aus der CSP.

Manifest V2-Syntax

In Manifest V2 gibt es eine Content-Security-Policy, die gegen den Schlüssel so angegeben wird:

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

Manifest V3-Syntax

In Manifest V3 ist der content_security_policy-Schlüssel ein Objekt, das eine dieser 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 sandboxed Erweiterungsseiten verwendet wird.

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 Add-on-Richtlinien und aufgrund erheblicher Sicherheitsprobleme.

Hinweis: Einige Beispiele beinhalten die object-src-Direktive, die ältere Browserversionen unterstützt. Für mehr Details siehe object-src Direktive.

Erfordern, dass alle Inhaltstypen mit der Erweiterung gebündelt werden sollen:

  • Manifest V2

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

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

Erlauben von entfernten Skripten 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 von entfernten Skripten 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 entfernten URLs in script-src von extension_pages.

Erlauben von eval() und verwandten Funktionen:

  • Manifest V2

    json
    "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';"
    
  • Manifest V3 erlaubt 'unsafe-eval' nicht in script-src.

Erlauben des Inline-Skripts: "<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.

Den Rest der Richtlinie beibehalten, aber auch verlangen, dass Bilder mit der Erweiterung gebündelt 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 der Nutzung von WebAssembly:

  • Manifest V2

    Zur 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 dazu aufgefordert, 'wasm-unsafe-eval' in ihrer CSP anzugeben. Weitere Informationen siehe 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:

json
"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 Schlüsselwort "self" 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'"

Platzhalter wird mit einem generischen Domain verwendet:

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

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