Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. HTTP
  3. Reference
  4. Headers
  5. Content-Security-Policy
  6. script-src

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

View in EnglishAlways switch to English

Content-Security-Policy: script-src Richtlinie

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨August 2016⁩.

* Some parts of this feature may have varying levels of support.

Die HTTPContent-Security-Policy (CSP)script-src-Richtlinie spezifiziert gültige Quelladressen für JavaScript. Dies umfasst nicht nur URLs, die direkt in<script>-Elemente geladen werden, sondern auch Dinge wie Inline-Skript-Event-Handler (onclick) undXSLT Stylesheets, die die Skriptausführung auslösen können.

CSP-Version1
RichtlinientypFetch directive
default-src Fallback Ja. Wenn diese Richtlinie fehlt, sucht der Benutzeragent nach derdefault-src-Richtlinie.

Syntax

http
Content-Security-Policy: script-src 'none';Content-Security-Policy: script-src <source-expression-list>;

Diese Richtlinie kann einen der folgenden Werte haben:

'none'

Keine Ressourcen dieses Typs dürfen geladen werden. Die einfachen Anführungszeichen sind obligatorisch.

<source-expression-list>

Eine durch Leerzeichen getrennte Liste vonsource expression Werten. Ressourcen dieses Typs dürfen geladen werden, wenn sie mit einem der angegebenen Quellenausdrücke übereinstimmen. Für diese Richtlinie sind alle Quellenausdrückewerte aus derFetch-Direktiven-Syntax anwendbar.

Beispiele

Erlauben von Ressourcen von vertrauenswürdigen Domänen

Gegeben ist dieser CSP-Header, der nur Skripte vonhttps://example.com erlaubt:

http
Content-Security-Policy: script-src https://example.com/

Das folgende Skript wird blockiert und nicht geladen oder ausgeführt:

html
<script src="https://not-example.com/js/library.js"></script>

Beachten Sie, dass auch Inline-Event-Handler blockiert werden:

html
<button>Click me</button>

Sie sollten sie durchaddEventListener Aufrufe ersetzen:

js
document.getElementById("btn").addEventListener("click", doSomething);

Falls Sie Inline-Event-Handler nicht ersetzen können, können Sie den Quellenausdruck'unsafe-hashes' verwenden, um sie zu erlauben.Weitere Informationen finden Sie unterUnsichere Hashes.

Erlauben von externen Skripten mit Hashes

Das Erlauben von vertrauenswürdigen Domänen, wie im obigen Abschnitt gezeigt, ist ein pragmatischer Ansatz für die Spezifikation der Standorte, von denen Code sicher geladen werden kann, insbesondere wenn Ihre Site viele Ressourcen verwendet und Sie darauf vertrauen, dass die vertrauenswürdige Site nicht kompromittiert wird.

Eine alternative Methode besteht darin, erlaubte Skripte mit Dateihashes zu spezifizieren.Mit diesem Ansatz kann eine externe Datei in einem<script>-Element nur geladen und ausgeführt werden, wenn alle gültigen Hash-Werte in ihremintegrity Attribut mit den erlaubten Werten im CSP-Header übereinstimmen.DieSubresource Integrity-Funktion überprüft zusätzlich, ob die heruntergeladene Datei den angegebenen Hash-Wert hat und daher nicht verändert wurde.Dies ist sicherer als das Vertrauen in eine Domäne, da Dateien nur verwendet werden, wenn sie unverändert sind, selbst wenn sie von einer kompromittierten Site geladen werden.Es ist jedoch granularer und erfordert, dass Hash-Werte in CSP- und Skriptelementen aktualisiert werden, wann immer die zugehörigen Skripte geändert werden.

Der nachfolgende CSP-Header demonstriert den Ansatz.Er erlaubt Skripte, für die der SHA384-HashoqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC oder der SHA256-Hashfictional_value ist.

http
Content-Security-Policy: script-src 'sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC' 'sha256-fictional_value'

Dasexample-framework.js-Skript unten sollte geladen werden, weil der Hash-Wert in seinemintegrity-Attribut auch im CSP vorhanden ist (vorausgesetzt, die Datei hat tatsächlich den Hash, sobald sie heruntergeladen ist!)

html
<script  src="https://example.com/example-framework.js"  integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"  crossorigin="anonymous"></script>

Dasintegrity-Attribut kann mehrere Werte enthalten, die jeweils einen Hash für die Datei darstellen, berechnet mit einem anderen Algorithmus.Damit ein externes Skript geladen werden kann, erfordert CSP, dassalle gültigen Hash-Werte im Attribut auch in der CSPscript-src-Deklaration vorhanden sein müssen.Daher würde das folgende Skript nicht geladen, da der zweite Hash im obigen CSP-Header nicht vorhanden ist.

html
<script  src="https://example.com/example-framework.js"  integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC sha256-not-in-csp"  crossorigin="anonymous"></script>

Diese Regel gilt nur fürgültige Hash-Werte.Werte, die vom Browser nicht als Hashes erkannt werden, werden ignoriert, sodass das folgende Skript geladen werden sollte:

html
<script  src="https://example.com/example-framework.js"  integrity="invalid-or-unsupported-hash sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"  crossorigin="anonymous"></script>

Subresource Integrity enthält weitere Informationen zur Berechnung von Hashes und zur Verwendung desintegrity-Attributs.

Unsichere Inline-Skripte

Hinweis:Das Verhindern von Inline-Stilen und Inline-Skripten ist einer der größten Sicherheitsgewinne, die CSP bietet.Wenn Sie sie unbedingt verwenden müssen, gibt es einige Mechanismen, die dies erlauben.Hashes gelten für Inline-Skripte und Stile, aber nicht für Event-Handler.Weitere Informationen finden Sie unterUnsichere Hashes.

Um Inline-Skripte und Styles zu erlauben, kann'unsafe-inline', eine Nonce-Quelle oder eine Hash-Quelle angegeben werden, die mit dem Inline-Block übereinstimmt.Die folgende Content-Security-Policy erlaubt alle Inline-<script>-Elemente:

http
Content-Security-Policy: script-src 'unsafe-inline';

Das folgende<script>-Element wird durch die Richtlinie erlaubt:

html
<script>  const inline = 1;  // …</script>

Das Erlauben aller Inline-Skripte gilt als Sicherheitsrisiko, daher wird empfohlen, stattdessen eine Nonce-Quelle oder eine Hash-Quelle zu verwenden.Um Inline-Skripte und Styles mit einer Nonce-Quelle zu erlauben, müssen Sie einen zufälligen Nonce-Wert (unter Verwendung eines kryptographisch sicheren Zufallstoken-Generators) generieren und in die Richtlinie aufnehmen.Es ist wichtig zu beachten, dass dieser Nonce-Wert dynamisch generiert werden muss, da er für jede HTTP-Anfrage einzigartig sein muss:

http
Content-Security-Policy: script-src 'nonce-2726c7f26c'

Dann müssen Sie den gleichen Nonce in das<script>-Element aufnehmen:

html
<script nonce="2726c7f26c">  const inline = 1;  // …</script>

Alternativ können Sie Hashes aus Ihren Inline-Skripten erstellen. CSP unterstützt sha256, sha384 und sha512.

http
Content-Security-Policy: script-src 'sha256-B2yPHKaXnvFWtRChIbabYmUBFZdVfKKXHbWtWidDVF8='

Wenn Sie den Hash generieren, schließen Sie die<script>-Tags nicht ein und beachten Sie, dass Großschreibung und Leerzeichen eine Rolle spielen, einschließlich führender oder nachfolgender Leerzeichen.

html
<script>  const inline = 1;</script>

Unsichere Hashes

Richtlinien für Inline-Ressourcen mit Hashes wiescript-src 'sha256-{HASHED_INLINE_SCRIPT}' erlauben Skripte und Styles anhand ihres Hashes, aber nicht Event-Handler:

html
<!-- Allowed by CSP: script-src 'sha256-{HASHED_INLINE_SCRIPT}' --><script>  const inline = 1;</script><!-- CSP: script-src 'sha256-{HASHED_EVENT_HANDLER}'      will not allow this event handler --><button>Submit</button>

Anstatt'unsafe-inline' zu erlauben, können Sie den Quellenausdruck'unsafe-hashes' verwenden, wenn der Code nicht zu entsprechendenaddEventListener Aufrufen aktualisiert werden kann.Angesichts einer HTML-Seite, die den folgenden Inline-Event-Handler enthält:

html
<!-- I want to use addEventListener, but I can't :( --><button>Submit</button>

Der folgende CSP-Header erlaubt die Ausführung des Skripts:

http
Content-Security-Policy:  script-src 'unsafe-hashes' 'sha256-{HASHED_EVENT_HANDLER}'

Unsichere eval-Ausdrücke

Der Quellenausdruck'unsafe-eval' steuert mehrere Skriptausführungsmethoden, die Code aus Zeichenfolgen erstellen.Wenn eine Seite einen CSP-Header hat und'unsafe-eval' nicht mit derscript-src-Richtlinie angegeben ist, werden die folgenden Methoden blockiert und haben keine Wirkung:

Unsichere WebAssembly-Ausführung

Der Quellenausdruck'wasm-unsafe-eval' steuert die WebAssembly-Ausführung.Wenn eine Seite einen CSP-Header hat und'wasm-unsafe-eval' nicht in derscript-src-Richtlinie angegeben ist, wird das Laden und Ausführen von WebAssembly auf der Seite blockiert.

Der Quellenausdruck'wasm-unsafe-eval' ist spezifischer als'unsafe-eval', das sowohl die Kompilierung (und Instanzierung) von WebAssembly als auch zum Beispiel die Verwendung deseval-Vorgangs in JavaScript erlaubt.Wenn das Schlüsselwort'unsafe-eval' verwendet wird, überschreibt dies jedes Vorkommen von'wasm-unsafe-eval' in der CSP-Richtlinie.

http
Content-Security-Policy: script-src 'wasm-unsafe-eval'

strict-dynamic

Der Quellenausdruck'strict-dynamic' gibt an, dass das einer im Markup vorhandenen Script explizit gegebene Vertrauen, indem es von einem Nonce oder einem Hash begleitet wird, auf alle von diesem Root-Skript geladenen Skripte übertragen werden soll. Gleichzeitig werden alle Erlaubnislisten oder Quellenausdrücke wie'self' oder'unsafe-inline' ignoriert.

Zum Beispiel würde eine Richtlinie wiescript-src 'strict-dynamic' 'nonce-R4nd0m' https://allowlisted.example.com/ das Laden eines Root-Skripts mit<script nonce="R4nd0m" src="https://example.com/loader.js"> und die Übertragung dieses Vertrauens auf jedes vonloader.js geladene Skript erlauben, aber das Laden von Skripten vonhttps://allowlisted.example.com/ verbieten, es sei denn, sie werden von einem Nonce begleitet oder von einem vertrauenswürdigen Skript geladen.

http
Content-Security-Policy: script-src 'strict-dynamic' 'nonce-someNonce'

Oder:

http
Content-Security-Policy: script-src 'strict-dynamic' 'sha256-base64EncodedHash'

Es ist möglich,strict-dynamic rückwärtskompatibel zu implementieren, ohne eine Benutzeragenten-Abfrage zu benötigen.Die Richtlinie:

http
Content-Security-Policy: script-src 'unsafe-inline' https: 'nonce-abcdefg' 'strict-dynamic'

wird wie'unsafe-inline' https: in Browsern, die CSP1 unterstützen,https: 'nonce-abcdefg' in Browsern, die CSP2 unterstützen, und'nonce-abcdefg' 'strict-dynamic' in Browsern, die CSP3 unterstützen, wirken.

Zulassen von Spekulationsregeln

UmSpekulationsregeln in einem Skriptelement einzuschließen (siehe auch<script type="speculationrules">), müssen Sie diescript-src-Richtlinie mit einer der'inline-speculation-rules' Quellen, einer Hash-Quelle oder einer Nonce-Quelle verwenden. Zum Beispiel:

http
Content-Security-Policy: script-src 'inline-speculation-rules'

Spezifikationen

Specification
Content Security Policy Level 3
# directive-script-src

Browser-Kompatibilität

Siehe auch

Help improve MDN

Learn how to contribute Diese Seite wurde automatisch aus dem Englischen übersetzt.

[8]ページ先頭

©2009-2025 Movatter.jp