Content-Security-Policy (CSP)
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.
Der HTTP-Header Content-Security-Policy
ermöglicht es Website-Administratoren, die Ressourcen zu kontrollieren, die der Benutzeragent für eine gegebene Seite laden darf. Mit einigen Ausnahmen beziehen sich Richtlinien meistens auf die Angabe von Server-Ursprung und Skript-Endpunkten. Dies hilft, Cross-Site-Scripting-Angriffe abzuwehren.
Siehe den Content Security Policy (CSP)-Leitfaden für Details dazu, wie eine CSP dem Browser geliefert wird, wie sie aussieht, sowie für Anwendungsfälle und Bereitstellungsstrategien.
Header-Typ | Antwort-Header |
---|---|
Verbotener Anforderungs-Header | nein |
Syntax
Content-Security-Policy: <policy-directive>; <policy-directive>
wobei <policy-directive>
besteht aus:
<directive> <value>
ohne interne Zeichensetzung.
Richtlinien
Fetch-Richtlinien
Fetch-Richtlinien kontrollieren die Orte, von denen bestimmte Ressourcentypen geladen werden dürfen.
child-src
-
Definiert die gültigen Quellen für Web Worker und verschachtelte Browsing-Kontexte, die mit Elementen wie
<frame>
und<iframe>
geladen werden.Fallback für
frame-src
undworker-src
. connect-src
-
Beschränkt die URLs, die mit Skript-Schnittstellen geladen werden können.
default-src
-
Dient als Fallback für die anderen Fetch-Richtlinien.
Fallback für alle anderen Fetch-Richtlinien.
fenced-frame-src
Experimentell-
Spezifiziert gültige Quellen für verschachtelte Browsing-Kontexte, die in
<fencedframe>
-Elemente geladen werden. font-src
-
Spezifiziert gültige Quellen für Schriftarten, die mit
@font-face
geladen werden. frame-src
-
Spezifiziert gültige Quellen für verschachtelte Browsing-Kontexte, die in Elemente wie
<frame>
und<iframe>
geladen werden. img-src
-
Spezifiziert gültige Quellen für Bilder und Favicons.
manifest-src
-
Spezifiziert gültige Quellen für Anwendungsmanifestdateien.
media-src
-
Spezifiziert gültige Quellen zum Laden von Medien mit den Elementen
<audio>
,<video>
und<track>
. object-src
-
Spezifiziert gültige Quellen für die Elemente
<object>
und<embed>
. prefetch-src
Veraltet Nicht standardisiert-
Spezifiziert gültige Quellen zum Vorabrufen oder Vorerstellen.
script-src
-
Spezifiziert gültige Quellen für JavaScript- und WebAssembly-Ressourcen.
Fallback für
script-src-elem
undscript-src-attr
. script-src-elem
-
Spezifiziert gültige Quellen für JavaScript-
<script>
-Elemente. script-src-attr
-
Spezifiziert gültige Quellen für JavaScript-Inline-Ereignishandler.
style-src
-
Spezifiziert gültige Quellen für Stylesheets.
Fallback für
style-src-elem
undstyle-src-attr
. style-src-elem
-
Spezifiziert gültige Quellen für Stylesheets in
<style>
-Elementen und<link>
-Elementen mitrel="stylesheet"
. style-src-attr
-
Spezifiziert gültige Quellen für Inline-Stile, die auf einzelne DOM-Elemente angewendet werden.
worker-src
-
Spezifiziert gültige Quellen für
Worker
,SharedWorker
oderServiceWorker
-Skripte.
Alle Fetch-Richtlinien können mit dem einzelnen Wert 'none'
spezifiziert werden, was bedeutet, dass der spezifische Ressourcentyp vollständig blockiert werden soll, oder mit einem oder mehreren source expression-Werten, die gültige Quellen für diesen Ressourcentyp angeben. Siehe Fetch-Richtlinien-Syntax für weitere Details.
Fallbacks
Einige Fetch-Richtlinien fungieren als Fallbacks für andere, spezifischere Richtlinien. Das bedeutet, wenn die spezifischere Richtlinie nicht angegeben ist, wird das Fallback verwendet, um eine Richtlinie für diesen Ressourcentyp bereitzustellen.
default-src
ist ein Fallback für alle anderen Fetch-Richtlinien.script-src
ist ein Fallback fürscript-src-attr
undscript-src-elem
.style-src
ist ein Fallback fürstyle-src-attr
undstyle-src-elem
.child-src
ist ein Fallback fürframe-src
undworker-src
.
Zum Beispiel:
- Wenn
img-src
weggelassen wird, aberdefault-src
enthalten ist, wird die vondefault-src
definierte Richtlinie auf Bilder angewendet. - Wenn
script-src-elem
weggelassen wird, aberscript-src
enthalten ist, wird die vonscript-src
definierte Richtlinie auf<script>
-Elemente angewendet. - Wenn
script-src-elem
undscript-src
weggelassen werden, aberdefault-src
enthalten ist, wird die vondefault-src
definierte Richtlinie auf<script>
-Elemente angewendet.
Dokumentrichtlinien
Dokumentrichtlinien bestimmen die Eigenschaften eines Dokuments oder Workers-Umgebung, auf die eine Richtlinie angewendet wird.
Navigationsrichtlinien
Navigationsrichtlinien bestimmen, zu welchen Orten ein Benutzer navigieren oder ein Formular absenden kann, zum Beispiel.
form-action
-
Beschränkt die URLs, die als Ziel einer Formularübermittlung von einem gegebenen Kontext verwendet werden können.
frame-ancestors
-
Spezifiziert gültige Eltern, die eine Seite mittels
<frame>
,<iframe>
,<object>
oder<embed>
einbetten dürfen.
Berichtsrichtlinien
Berichtsrichtlinien kontrollieren die Ziel-URL für CSP-Verletzungsberichte in Content-Security-Policy
und Content-Security-Policy-Report-Only
.
report-to
-
Gibt dem Browser ein Token, das den Meldeendpunkt oder eine Gruppe von Endpunkten identifiziert, an die Informationen über CSP-Verletzungen gesendet werden sollen. Die Endpunkte, die das Token darstellt, werden durch andere HTTP-Header bereitgestellt, wie z.B.
Reporting-Endpoints
undReport-To
Veraltet .Warnung: Diese Richtlinie ist dazu gedacht,
report-uri
zu ersetzen; in Browsern, diereport-to
unterstützen, wird diereport-uri
-Richtlinie ignoriert. Bisreport-to
jedoch umfassend unterstützt wird, sollten Sie beide Header wie gezeigt angeben (wobeiendpoint_name
der Name eines separat bereitgestellten Endpunktes ist):httpContent-Security-Policy: …; report-uri https://endpoint.example.com; report-to endpoint_name
Andere Richtlinien
require-trusted-types-for
Experimentell-
Erzwingt Trusted Types an den DOM XSS-Einschleusungspunkten.
trusted-types
Experimentell-
Wird verwendet, um eine Positivliste von Trusted Types-Richtlinien anzugeben. Trusted Types erlaubt es Anwendungen, DOM XSS-Einschleusungspunkte zu verriegeln, sodass nur nicht-verschleierbare, typisierte Werte anstelle von Zeichenfolgen akzeptiert werden.
upgrade-insecure-requests
-
Informiert Benutzeragenten, alle unsicheren URLs einer Seite (die über HTTP geliefert werden) so zu behandeln, als wären sie durch sichere URLs (die über HTTPS geliefert werden) ersetzt worden. Diese Richtlinie ist für Websites gedacht, die viele unsichere, veraltete URLs haben, die umgeschrieben werden müssen.
Veraltete Richtlinien
block-all-mixed-content
Veraltet-
Verhindert das Laden von beliebigen Assets über HTTP, wenn die Seite über HTTPS geladen wird.
report-uri
Veraltet-
Gibt dem Browser eine URL an, an die CSP-Verletzungsberichte gesendet werden sollen. Diese wurde durch die
report-to
-Richtlinie ersetzt.
Fetch-Richtlinien-Syntax
Alle Fetch-Richtlinien können als eine der folgenden Optionen angegeben werden:
- der Einzelwert
'none'
, was darauf hinweist, dass der spezifische Ressourcentyp vollständig blockiert werden soll - ein oder mehrere source expression-Werte, die gültige Quellen für diesen Ressourcentyp angeben.
Jeder source expression hat eine der unten aufgeführten Formen. Beachten Sie, dass nicht alle Formen für alle Fetch-Richtlinien anwendbar sind: Siehe die Dokumentation jeder Fetch-Richtlinie, um herauszufinden, welche Formen für sie anwendbar sind.
Die Formate <host-source>
und <scheme-source>
müssen nicht umschlossen werden, und alle anderen Formate müssen in einfache Anführungszeichen eingeschlossen werden.
'nonce-<nonce_value>'
Dieser Wert besteht aus dem String nonce-
gefolgt von einem Base64-kodierten String. Dieser String ist ein zufälliger Wert, den der Server für jede HTTP-Antwort generiert. Zum Beispiel:
'nonce-416d1177-4d12-4e3b-b7c9-f6c409789fb8'
Der Server kann dann denselben Wert als Wert des nonce
-Attributs jedes <script>
- oder <style>
-Ressourcen einschließen, die sie vom Dokument laden möchten.
Der Browser vergleicht den Wert aus der CSP-Richtlinie mit dem Wert im Elementattribut und lädt die Ressource nur, wenn sie übereinstimmen.
Wenn eine Richtlinie einen nonce und unsafe-inline
enthält, ignoriert der Browser unsafe-inline
.
Siehe Nonce im CSP-Leitfaden für weitere Anwendungsinformationen.
'<hash_algorithm>-<hash_value>'
Dieser Wert besteht aus einem String, der einen Hash-Algorithmus identifiziert, gefolgt von -
, gefolgt von einem Base64-kodierten String, der den Hash-Wert darstellt.
- Der Hash-Algorithmus-Identifikator muss einer von
sha256
,sha384
odersha512
sein. - Der Hash-Wert ist der Base64-kodierte Hash einer
<script>
- oder<style>
-Ressource, berechnet mit einer der folgenden Hash-Funktionen: SHA-256, SHA-384 oder SHA-512.
Zum Beispiel:
'sha256-cd9827ad...'
Wenn der Browser das Dokument empfängt, hasht er den Inhalt aller <script>
- und <style>
-Elemente, vergleicht das Ergebnis mit allen Hashes in der CSP-Richtlinie und lädt die Ressource nur, wenn es eine Übereinstimmung gibt.
Wenn das Element eine externe Ressource lädt (z. B. unter Verwendung des src
-Attributs), muss das Element auch das integrity
-Attribut gesetzt haben.
Wenn eine Richtlinie einen Hash und unsafe-inline
enthält, ignoriert der Browser unsafe-inline
.
Siehe Hashes im CSP-Leitfaden für weitere Anwendungsinformationen.
<host-source>
Die URL oder IP-Adresse eines Host, der eine gültige Quelle für die Ressource ist.
Das Schema, die Portnummer und der Pfad sind optional.
Wenn das Schema weggelassen wird, wird das Schema des Ursprungs des Dokuments verwendet.
Beim Vergleich von Schemas sind sichere Upgrades erlaubt. Zum Beispiel:
http://example.com
erlaubt auch Ressourcen vonhttps://example.com
ws://example.org
erlaubt auch Ressourcen vonwss://example.org
.
Platzhalter ('*'
) können für Subdomains, Hostadressen und Portnummern verwendet werden, was darauf hinweist, dass alle legalen Werte jedes einzelnen gültig sind. Zum Beispiel:
http://*.example.com
erlaubt Ressourcen von jeder Subdomain vonexample.com
, über HTTP oder HTTPS.
Pfade, die mit /
enden, stimmen mit jedem Pfad überein, dessen Präfix sie sind. Zum Beispiel:
example.com/api/
erlaubt Ressourcen vonexample.com/api/users/new
.
Pfade, die nicht mit /
enden, werden genau abgeglichen. Zum Beispiel:
https://example.com/file.js
erlaubt Ressourcen vonhttps://example.com/file.js
, aber nichthttps://example.com/file.js/file2.js
.
<scheme-source>
Ein Schema, wie z. B. https:
. Der Doppelpunkt ist erforderlich.
Sichere Upgrades sind erlaubt, so dass:
http:
erlaubt auch Ressourcen, die über HTTPS geladen werdenws:
erlaubt auch Ressourcen, die über WSS geladen werden.
'self'
Ressourcen des gegebenen Typs dürfen nur vom selben Ursprung wie das Dokument geladen werden.
Sichere Upgrades sind erlaubt. Zum Beispiel:
- Wenn das Dokument von
http://example.com
geliefert wird, erlaubt eine CSP von'self'
auch Ressourcen vonhttps://example.com
. - Wenn das Dokument von
ws://example.org
geliefert wird, erlaubt eine CSP von'self'
auch Ressourcen vonwss://example.org
.
'unsafe-eval'
Standardmäßig, wenn eine CSP default-src
oder eine script-src
-Richtlinie enthält, sind JavaScript-Funktionen, die ihre Argumente als JavaScript auswerten, deaktiviert. Dies schließt eval()
, das code
-Argument für setTimeout()
, oder den Function()
-Konstruktor ein.
Das unsafe-eval
-Schlüsselwort kann verwendet werden, um diesen Schutz aufzuheben und die dynamische Auswertung von Zeichenfolgen als JavaScript zuzulassen.
Warnung:
Entwickler sollten 'unsafe-eval'
vermeiden, da es den Zweck einer CSP weitgehend untergräbt.
Siehe eval()
und ähnliche APIs im CSP-Leitfaden für weitere Anwendungsinformationen.
'wasm-unsafe-eval'
Standardmäßig, wenn eine CSP eine default-src
oder eine script-src
-Richtlinie enthält, wird es einer Seite nicht erlaubt sein, WebAssembly mit Funktionen wie WebAssembly.compileStreaming()
zu kompilieren.
Das wasm-unsafe-eval
-Schlüsselwort kann verwendet werden, um diesen Schutz aufzuheben. Dies ist eine viel sicherere Alternative zu 'unsafe-eval'
, da es keine allgemeine Auswertung von JavaScript ermöglicht.
'unsafe-inline'
Standardmäßig, wenn eine CSP default-src
oder eine script-src
-Richtlinie enthält, wird Inline-JavaScript nicht zur Ausführung zugelassen. Dies schließt ein:
- Inline-
<script>
-Tags - Inline-Event-Handler-Attribute
javascript:
URLs.
Ähnlich, wenn eine CSP default-src
oder eine style-src
-Richtlinie enthält, wird Inline-CSS nicht geladen, einschließlich:
- Inline-
<style>
-Tags style
-Attribute.
Das unsafe-inline
-Schlüsselwort kann verwendet werden, um diesen Schutz aufzuheben und all diese Formen zuzulassen.
Warnung:
Entwickler sollten 'unsafe-inline'
vermeiden, da es den Zweck einer CSP weitgehend untergräbt.
Siehe Inline-JavaScript im CSP-Leitfaden für weitere Anwendungsinformationen.
'unsafe-hashes'
Standardmäßig, wenn eine CSP default-src
oder eine script-src
-Richtlinie enthält, werden Inline-Ereignishandlerattribute wie onclick
und Inline-style
-Attribute nicht zur Ausführung zugelassen.
Der Ausdruck 'unsafe-hashes'
erlaubt es dem Browser, hash expressions für Inline-Ereignishandler und style
-Attribute zu verwenden. Zum Beispiel könnte eine CSP eine Richtlinie enthalten wie diese:
script-src 'unsafe-hashes' 'sha256-cd9827ad...'
Wenn der Hash-Wert mit dem Hash-Wert eines Inline-Ereignishandlerattributs oder eines style
-Attributswerts übereinstimmt, wird der Code zur Ausführung zugelassen.
Warnung:
Der Wert 'unsafe-hashes'
ist unsicher.
Insbesondere ermöglicht er einen Angriff, bei dem der Inhalt des Inline-Ereignishandlerattributs in das Dokument als Inline-<script>
-Element eingefügt wird. Nehmen wir an, der Inline-Event-Handler ist:
<button onclick="transferAllMyMoney()">Transfer all my money</button>
Wenn ein Angreifer ein Inline-<script>
-Element mit diesem Code injizieren kann, wird die CSP es erlauben, es automatisch auszuführen.
Allerdings ist 'unsafe-hashes'
viel sicherer als 'unsafe-inline'
.
'inline-speculation-rules'
Standardmäßig, wenn eine CSP default-src
oder eine script-src
-Richtlinie enthält, wird Inline-JavaScript nicht zur Ausführung zugelassen. Die 'inline-speculation-rules'
erlaubt es dem Browser, Inline-<script>
-Elemente zu laden, die ein type
-Attribut von speculationrules
haben.
Siehe die Speculation Rules API für weitere Informationen.
'strict-dynamic'
Das 'strict-dynamic'
-Schlüsselwort erweitert das Vertrauen, das auf ein Skript anhand eines nonce oder eines hash gewährt wird, auf Skripte, die dieses Skript dynamisch lädt, zum Beispiel durch Erstellen neuer <script>
-Tags mit Document.createElement()
und anschließendes Einfügen in das Dokument mit Node.appendChild()
.
Ist dieses Schlüsselwort in einer Richtlinie vorhanden, werden die folgenden source expression-Werte alle ignoriert:
Siehe Das strict-dynamic
-Schlüsselwort im CSP-Leitfaden für weitere Anwendungsinformationen.
'report-sample'
Wenn dieser Ausdruck in einer Richtlinie zur Steuerung von Skripten oder Stilen enthalten ist und die Richtlinie den Browser dazu veranlasst, Inline-Skripte, Inline-Stile oder Event-Handler-Attribute zu blockieren, enthält der Verletzungsbericht, den der Browser generiert, eine sample
-Eigenschaft mit den ersten 40 Zeichen der blockierten Ressource.
CSP in Workern
Worker sind im Allgemeinen nicht von der Inhaltsrichtlinie des Dokuments (oder des übergeordneten Workers) geregelt, das sie erstellt hat. Um eine Inhaltsrichtlinie für den Worker festzulegen, setzen Sie einen Content-Security-Policy
-Antwort-Header für die Anforderung, die das Worker-Skript selbst angefordert hat.
Die Ausnahme ist, wenn der Ursprung des Worker-Skripts ein global eindeutiger Bezeichner ist (zum Beispiel, wenn seine URL ein Schema von data oder blob hat). In diesem Fall erbt der Worker die Inhaltsrichtlinie des Dokuments oder Workers, der ihn erstellt hat.
Mehrere Inhaltsrichtlinien
Der CSP-Mechanismus erlaubt, dass mehrere Richtlinien für eine Ressource angegeben werden, einschließlich
durch den Content-Security-Policy
-Header, den
Content-Security-Policy-Report-Only
-Header und ein
<meta>
-Element.
Sie können den Content-Security-Policy
-Header mehrmals verwenden, wie im
Beispiel unten. Achten Sie besonders auf die connect-src
-Richtlinie hier. Auch
wenn die zweite Richtlinie die Verbindung zulassen würde, enthält die erste Richtlinie
connect-src 'none'
. Das Hinzufügen zusätzlicher Richtlinien kann die
Fähigkeiten der geschützten Ressource nur weiter einschränken, was bedeutet, dass keine Verbindung
erlaubt wird und, als die strengste Richtlinie, connect-src 'none'
durchgesetzt wird.
Content-Security-Policy: default-src 'self' http://example.com;
connect-src 'none';
Content-Security-Policy: connect-src http://example.com/;
script-src http://example.com/
Beispiele
Unsicherer Inline-Code deaktivieren und nur HTTPS-Ressourcen zulassen
Dieser HTTP-Header setzt die Standardrichtlinie so, dass das Laden von Ressourcen (Bilder, Schriftarten, Skripte usw.) nur über HTTPS zulässt. Da die unsafe-inline
und unsafe-eval
-Richtlinien nicht gesetzt sind, werden Inline-Skripte blockiert.
Content-Security-Policy: default-src https:
Die gleichen Einschränkungen können auch mit dem HTML-<meta>
-Element angewendet werden.
<meta http-equiv="Content-Security-Policy" content="default-src https:" />
Inline-Code und HTTPS-Ressourcen zulassen, aber Plugins deaktivieren
Diese Richtlinie könnte auf einer vorhandenen Seite verwendet werden, die zu viel Inline-Code für eine Korrektur verwendet, um sicherzustellen, dass Ressourcen nur über HTTPS geladen werden und Plugins deaktiviert werden:
Content-Security-Policy: default-src https: 'unsafe-eval' 'unsafe-inline'; object-src 'none'
Verstöße melden, aber nicht durchsetzen beim Testen
Dieses Beispiel setzt die gleichen Einschränkungen wie das vorherige Beispiel, jedoch unter Verwendung des Content-Security-Policy-Report-Only
-Headers und der report-to
-Richtlinie.
Dieser Ansatz wird während des Testens verwendet, um Verstöße zu berichten, aber den Code nicht am Ausführen zu hindern.
Endpunkte (URLs) zur Übermittlung von Berichten werden mit dem Reporting-Endpoints
-HTTP-Antwort-Header definiert.
Reporting-Endpoints: csp-endpoint="https://example.com/csp-reports"
Ein bestimmter Endpunkt wird dann als Berichtsziele in der CSP-Richtlinie mit der report-to
-Richtlinie ausgewählt.
Content-Security-Policy-Report-Only: default-src https:; report-uri /csp-violation-report-url/; report-to csp-endpoint
Beachten Sie, dass die report-uri
Veraltet
-Richtlinie ebenfalls oben spezifiziert ist, weil report-to
von Browsern noch nicht umfassend unterstützt wird.
Siehe Content Security Policy (CSP) Implementierung für mehr Beispiele.
Spezifikationen
Specification |
---|
Content Security Policy Level 3 # csp-header |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
Content-Security-Policy-Report-Only
- Erfahren Sie mehr über: Content Security Policy
- Inhaltssicherheit in WebExtensions
- Adoptieren einer strikten Richtlinie
- CSP Evaluator - Bewerten Sie Ihre Content Security Policy