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 z.B. <script>-Ressourcen), und verbietet potenziell unsichere Praktiken wie die Verwendung von eval(). Siehe Standard-Content-Security-Policy, um mehr über die Auswirkungen 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 wie der Content-Security-Policy-HTTP-Header angegeben. Siehe Verwendung der 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 Hilfe der entsprechenden Policy-Direktive einschränken.
  • Ermöglichen, dass die Erweiterung WebAssembly nutzt, indem die Quelle 'wasm-unsafe-eval' in die script-src-Direktive aufgenommen wird.
  • Die Standard-script-src-Richtlinien zu lockern (nur Manifest V2):
    • Ermöglichen, dass die Erweiterung Skripte außerhalb ihres Pakets lädt, indem deren URL in der script-src-Direktive angegeben wird.
    • Ermöglichen, dass die Erweiterung Inline-Skripte ausführt, indem der Hash des Skripts in der script-src-Direktive angegeben wird.
    • Ermöglichen, dass die Erweiterung eval() und ähnliche Funktionen verwendet, indem 'unsafe-eval' in die script-src-Direktive aufgenommen wird.

Es gibt Einschränkungen für die Richtlinie, die Sie mit diesem Manifest-Schlüssel festlegen können:

  • Die script-src-Direktive muss mindestens das 'self'-Schlüsselwort enthalten und darf nur sichere Quellen enthalten. Die Menge der zugelassenen sicheren Quellen unterscheidet sich zwischen Manifest V2 und Manifest V3.
  • Die Richtlinie kann default-src allein enthalten (ohne script-src), wenn deren 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 die gleichen Anforderungen an sichere Quellen. Es gibt keine Einschränkungen für CSP-Direktiven, die nicht-skriptbasierte 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 Skriptdirektive als sicher angesehen, wenn sie diese Kriterien erfüllt:

  • 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 ö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 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, falls erforderlich, auf eine sichere Quelle wie 'none' gesetzt werden. 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 als unsicher angesehen wird, wird die Standardeinstellung ("object-src 'self'") verwendet und es wird eine Warnmeldung protokolliert.
  • In Safari gibt es keine Anforderung für "object-src".

Siehe W3C WebExtensions Community Group Thema 204, Remove object-src from the CSP, für mehr Informationen.

Manifest V2-Syntax

In Manifest V2 gibt es eine Content-Security-Policy, die dem Schlüssel folgendermaßen zugeordnet ist:

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

Manifest V3-Syntax

In Manifest V3 ist der Schlüssel content_security_policy ein Objekt, das jede dieser Eigenschaften haben 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 demonstrieren die korrekte Verwendung von Schlüsseln in CSP. Allerdings sind Erweiterungen mit 'unsafe-eval', Remote-Skripten, Blob- oder Remote-Quellen in ihrer CSP nicht für Firefox-Erweiterungen gemäß den Add-on-Richtlinien erlaubt und wegen erheblicher Sicherheitsprobleme untersagt.

Hinweis: Einige Beispiele beinhalten die object-src-Direktive, die eine Rückwärtskompatibilität für ältere Browserversionen bietet. Siehe object-src-Direktive für mehr Details.

Erfordern, dass alle Arten von Inhalten 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'"
    }
    

Erlaube Remote-Skripte 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.

Erlaube Remote-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 Remote-URLs in script-src von extension_pages.

Erlaube eval() und Ähnliches:

  • Manifest V2

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

Erlaube 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.

Behalte den Rest der Richtlinie, erfordere aber auch, dass Bilder mit der Erweiterung gebündelt werden sollen:

  • 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'"
    }
    

Aktiviere die Verwendung von WebAssembly:

  • Manifest V2

    Aus Gründen der Rückwärtskompatibilität können Manifest V2-Erweiterungen in Firefox WebAssembly ohne die Verwendung von 'wasm-unsafe-eval' nutzen. Dieses Verhalten ist jedoch nicht garantiert. Siehe Firefox-Fehler 1770909. Erweiterungen, die WebAssembly verwenden, werden daher ermutigt, 'wasm-unsafe-eval' in ihrer CSP anzugeben. Siehe WebAssembly auf der Seite zur Content Security Policy für weitere 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;"

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:

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 einer 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

BCD tables only load in the browser