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 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 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 in derselben Weise wie der HTTP-Header Content-Security-Policy angegeben. Weitere Informationen zur CSP-Syntax finden Sie unter Verwendung von Content Security Policy.

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

  • Erlaubte Quellen für andere Arten von Inhalten, wie Bilder und Stylesheets, mit der entsprechenden Policy-Direktive einzuschränken.
  • Der Erweiterung die Nutzung von WebAssembly zu ermöglichen, indem die Quelle 'wasm-unsafe-eval' in die script-src-Direktive aufgenommen wird.
  • Die Standardrichtlinien script-src (nur Manifest V2) zu lockern:
    • Der Erweiterung zu erlauben, Skripte außerhalb ihres Pakets zu laden, indem deren URL in der script-src-Direktive bereitgestellt wird.
    • Der Erweiterung zu erlauben, Inline-Skripte zu verwenden, indem der Hash des Skripts in der script-src-Direktive bereitgestellt wird.
    • Die Verwendung von eval() und ähnlichen Funktionen zu erlauben, indem 'unsafe-eval' in die script-src-Direktive aufgenommen wird.

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 enthalten. Die Menge der zulässigen sicheren Quellen unterscheidet sich zwischen Manifest V2 und Manifest V3.
  • Die Richtlinie kann allein default-src beinhalten (ohne script-src), wenn ihre Quellen die Anforderungen an 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 (falls als Fallback verwendet) – teilen dieselben Anforderungen an sichere Quellen. Es gibt keine Einschränkungen für CSP-Direktiven, die nicht auf Skriptinhalt abdecken, wie img-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 diese Kriterien erfüllt sind:

  • Platzhalter-Hosts sind nicht erlaubt, wie "script-src 'self' *".
  • Externe Quellen müssen https:-Schemata verwenden.
  • Externe Quellen dürfen keine Platzhalter für Domains in der öffentlichen Suffix-Liste verwenden (daher sind *.co.uk und *.blogspot.com nicht erlaubt, obwohl *.foo.blogspot.com erlaubt ist).
  • Alle Quellen müssen einen Host angeben.
  • Die einzigen zulässigen Schemata für Quellen sind blob:, filesystem:, moz-extension:, https:, und wss:.
  • Die einzigen zulässigen 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 bei Bedarf auf eine sichere Quelle wie 'none' gesetzt werden. 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 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 eine Warnmeldung protokolliert.
  • In Safari besteht keine Anforderung für "object-src".

Weitere Informationen finden Sie im W3C WebExtensions Community Group Issue 204, Remove object-src from the CSP.

Manifest V2-Syntax

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

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

Manifest V3-Syntax

In Manifest V3 ist der "content_security_policy"-Schlüssel ein Objekt, das jede 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 Sandbox-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', externen Skripten, Blob- oder externen Quellen in ihrer CSP gemäß den Add-on-Richtlinien und aufgrund erheblicher Sicherheitsprobleme für Firefox-Erweiterungen nicht zulässig.

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

Erfordern Sie, 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 Sie 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.

Erlauben Sie Remote-Skripte 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 Sie 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 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, erfordern Sie jedoch, 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

    Aus Gründen der 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. Weitere Informationen finden Sie auf der Seite zur 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 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 weitere 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'"

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, jedoch 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