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) angelegt. 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 finden Sie unter Standard-Content-Security-Policy.

Sie können den "content_security_policy"-Manifest-Schlüssel 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. Eine allgemeine Beschreibung der CSP-Syntax finden Sie unter Verwendung von Content Security Policy.

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

  • Die erlaubten Quellen für andere Inhaltsarten wie Bilder und Stylesheets mit der entsprechenden Richtliniendirektive einzuschränken.
  • 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 für Manifest V2):

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 'self'-Schlüsselwort enthalten und darf nur sichere Quellen enthalten. Die Menge der erlaubten sicheren Quellen unterscheidet sich 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 Details.
  • Direktiven, die sich auf Code beziehen – script-src, script-src-elem, worker-src und default-src (wenn als Fallback verwendet) – teilen dieselbe Anforderung an sichere Quellen. Es gibt keine Einschränkungen für CSP-Direktiven, die sich auf Nicht-Skript-Inhalte beziehen, wie img-src.

In Manifest V3 sind alle CSP-Quellen, die sich auf externe oder nicht-statische Inhalte beziehen, verboten. Die einzigen zugelassenen 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' *".
  • Remote-Quellen müssen https:-Schemata verwenden.
  • Remote-Quellen dürfen keine Platzhalter für Domains in der öffentlichen Suffixliste verwenden (also *.co.uk und *.blogspot.com sind nicht erlaubt, obwohl *.foo.blogspot.com erlaubt ist).
  • Alle Quellen müssen einen Host angeben.
  • Die einzigen zugelassenen Schemata für Quellen sind blob:, filesystem:, moz-extension:, https:, und wss:.
  • Die einzigen zugelassenen Schlüsselwörter sind: 'none', 'self', 'unsafe-eval', und 'wasm-unsafe-eval'.

object-src-Direktive

Die object-src-Direktive kann in einigen Browsern, die veraltete Plugins unterstützen, erforderlich sein und sollte bei Bedarf auf eine sichere Quelle wie 'none' gesetzt werden. Dies kann für Browser bis einschließlich 2022 notwendig sein.

  • In Firefox ist "object-src" ab Firefox 106 optional. In früheren Versionen wird, wenn "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 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, Remove object-src from the CSP, für weitere Informationen.

Manifest V2-Syntax

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

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

Manifest V3-Syntax

In Manifest V3 ist der content_security_policy-Schlüssel ein Objekt, das möglicherweise eine dieser Eigenschaften enthalten kann, die alle optional sind:

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 veranschaulichen die korrekte Verwendung von Schlüsseln in CSP. Allerdings sind Erweiterungen mit 'unsafe-eval', entfernten Skripten, Blob- oder Remote-Quellen in ihrer CSP gemäß den Add-on-Richtlinien und aufgrund signifikanter Sicherheitsprobleme für Firefox-Erweiterungen nicht zulässig.

Hinweis: Einige Beispiele enthalten die object-src-Direktive, die Rückwärtskompatibilität für ältere Browserversionen bietet. Weitere Details finden Sie unter object-src-Direktive.

Erfordern, dass alle Arten von Inhalten mit der Erweiterung verpackt werden:

  • Manifest V2

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

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

Erlauben von Remote-Skripten 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-src von extension_pages.

Erlauben von Remote-Skripten von jeder Subdomain 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-src von extension_pages.

Erlauben von eval() und Freunden:

  • Manifest V2

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

Behalten des Rests der Richtlinie, aber zusätzlich erfordern, 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'"
    }
    

Ermöglichen der Nutzung von WebAssembly:

  • Manifest V2

    Aus Kompatibilitätsgründen 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, sollten daher 'wasm-unsafe-eval' in ihrer CSP deklarieren. Weitere Informationen finden Sie auf der Content Security Policy-Seite 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:

json
"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 unter object-src-Direktive.

Richtlinie, die das "self"-Schlüsselwort in der "script-src"-Direktive weglässt:

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

Schema für eine Remote-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