Content-Security-Policy (CSP) header
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-Antwortheader Content-Security-Policy
ermöglicht es Website-Administratoren, die Ressourcen zu kontrollieren, die ein Benutzeragent für eine bestimmte Seite laden darf. Mit wenigen Ausnahmen beinhalten Richtlinien meist die Angabe von Server-Ursprüngen und Skript-Endpunkten. Dies hilft, Cross-Site Scripting-Angriffe zu verhindern.
Siehe den Content Security Policy (CSP)-Leitfaden für Details darüber, wie eine CSP an den Browser übermittelt wird, wie sie aussieht, sowie Anwendungsfälle und Bereitstellungsstrategien.
Header-Typ | Antwortheader |
---|---|
Verbotener Anfrage-Header | nein |
Syntax
Content-Security-Policy: <policy-directive>; <policy-directive>
wobei <policy-directive>
aus folgendem besteht:
<directive> <value>
ohne interne Interpunktion.
Direktiven
Fetch-Direktiven
Fetch-Direktiven steuern die Orte, von denen bestimmte Ressourcentypen geladen werden dürfen.
child-src
-
Definiert die gültigen Quellen für Web Worker und eingebettete 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 über Skript-Schnittstellen geladen werden können.
default-src
-
Dient als Fallback für die anderen Fetch-Direktiven.
Fallback für alle anderen Fetch-Direktiven.
fenced-frame-src
Experimentell-
Gibt gültige Quellen für eingebettete Browsing-Kontexte an, die in
<fencedframe>
-Elementen geladen werden. font-src
-
Gibt gültige Quellen für Schriften an, die mit
@font-face
geladen werden. frame-src
-
Gibt gültige Quellen für eingebettete Browsing-Kontexte an, die in Elementen wie
<frame>
und<iframe>
geladen werden. img-src
-
Gibt gültige Quellen für Bilder und Favicons an.
manifest-src
-
Gibt gültige Quellen für Anwendungsmanifestdateien an.
media-src
-
Gibt gültige Quellen für das Laden von Medien mit den
<audio>
,<video>
und<track>
-Elementen an. object-src
-
Gibt gültige Quellen für die
<object>
und<embed>
-Elemente an. prefetch-src
Veraltet Nicht standardisiert-
Gibt gültige Quellen an, die vorgeladen oder vorgeladengrendert werden sollen.
script-src
-
Gibt gültige Quellen für JavaScript- und WebAssembly-Ressourcen an.
Fallback für
script-src-elem
undscript-src-attr
. script-src-elem
-
Gibt gültige Quellen für JavaScript-
<script>
-Elemente an. script-src-attr
-
Gibt gültige Quellen für JavaScript-Inline-Ereignishandler an.
style-src
-
Gibt gültige Quellen für Stylesheets an.
Fallback für
style-src-elem
undstyle-src-attr
. style-src-elem
-
Gibt gültige Quellen für Stylesheet-
<style>
-Elemente und<link>
-Elemente mitrel="stylesheet"
an. style-src-attr
-
Gibt gültige Quellen für Inline-Stile an, die auf einzelne DOM-Elemente angewendet werden.
worker-src
-
Gibt gültige Quellen für
Worker
,SharedWorker
oderServiceWorker
-Skripte an.
Alle Fetch-Direktiven können den einzelnen Wert 'none'
angegeben erhalten, der anzeigt, dass der spezifische Ressourcentyp vollständig blockiert werden soll, oder als ein oder mehrere source expression-Werte, die gültige Quellen für diesen Ressourcentyp angeben. Weitere Details finden Sie unter Fetch-Direktiven-Syntax.
Fallbacks
Einige Fetch-Direktiven dienen als Fallbacks für andere, detailliertere Direktiven. Das bedeutet, dass, wenn die detailliertere Direktive nicht angegeben ist, der Fallback verwendet wird, um eine Richtlinie für diesen Ressourcentyp bereitzustellen.
default-src
ist ein Fallback für alle anderen Fetch-Direktiven.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, dann wird die vondefault-src
definierte Richtlinie auf Bilder angewendet. - Wenn
script-src-elem
weggelassen wird, aberscript-src
enthalten ist, dann wird die vonscript-src
definierte Richtlinie auf<script>
-Elemente angewendet. - Wenn
script-src-elem
undscript-src
beide weggelassen werden, aberdefault-src
enthalten ist, dann wird die vondefault-src
definierte Richtlinie auf<script>
-Elemente angewendet.
Dokument-Direktiven
Dokument-Direktiven steuern die Eigenschaften eines Dokuments oder einer Worker-Umgebung, auf die eine Richtlinie angewendet wird.
Navigations-Direktiven
Navigations-Direktiven steuern, zu welchen Orten ein Benutzer navigieren oder ein Formular senden kann, zum Beispiel.
form-action
-
Beschränkt die URLs, die als Ziel von Formularübermittlungen aus einem bestimmten Kontext verwendet werden können.
frame-ancestors
-
Gibt gültige Eltern an, die eine Seite mit
<frame>
,<iframe>
,<object>
oder<embed>
einbetten dürfen.
Reporting-Direktiven
Reporting-Direktiven steuern die Ziel-URL für CSP-Verletzungsberichte in Content-Security-Policy
und Content-Security-Policy-Report-Only
.
report-to
-
Bietet dem Browser ein Token, das die Reporting-Endpunkt oder eine Gruppe von Endpunkten identifiziert, an die CSP-Verletzungsinformationen gesendet werden sollen. Die Endpunkte, die das Token repräsentiert, werden über andere HTTP-Header bereitgestellt, wie
Reporting-Endpoints
undReport-To
Veraltet .Warnung: Diese Direktive ist vorgesehen, um
report-uri
zu ersetzen; in Browsern, diereport-to
unterstützen, wird diereport-uri
-Direktive ignoriert. Bisreport-to
jedoch umfassend unterstützt wird, sollten Sie beide Header spezifizieren, wie gezeigt (wobeiendpoint_name
der Name eines separat bereitgestellten Endpunkts ist):httpContent-Security-Policy: …; report-uri https://endpoint.example.com; report-to endpoint_name
Andere Direktiven
require-trusted-types-for
-
Erzwingt Trusted Types an den DOM-XSS-Injektionsstellen.
trusted-types
-
Wird verwendet, um eine Positivliste von Trusted Types-Richtlinien anzugeben. Trusted Types erlaubt es, DOM-XSS-Injektionsstellen zu sperren, sodass nur nicht-spoofbare, typisierte Werte anstelle von Strings akzeptiert werden.
upgrade-insecure-requests
-
Weist Benutzeragenten an, alle unsicheren URLs einer Seite (die über HTTP bereitgestellt werden) so zu behandeln, als ob sie mit sicheren URLs (die über HTTPS bereitgestellt werden) ersetzt wurden. Diese Direktive ist für Websites mit einer großen Anzahl unsicherer Legacy-URLs gedacht, die umgeschrieben werden müssen.
Veraltete Direktiven
block-all-mixed-content
Veraltet-
Verhindert das Laden von Assets über HTTP, wenn die Seite über HTTPS geladen wird.
report-uri
Veraltet-
Bietet dem Browser eine URL, an die CSP-Verletzungsberichte gesendet werden sollen. Dies wurde durch die
report-to
-Direktive abgelöst.
Fetch-Direktiven-Syntax
Alle Fetch-Direktiven können als einer der folgenden Werte angegeben werden:
- der einzelne Wert
'none'
, der angibt, 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 nimmt eine der unten aufgeführten Formen an. Beachten Sie, dass nicht alle Formen auf alle Fetch-Direktiven anwendbar sind: sehen Sie in der Dokumentation für jede Fetch-Direktive nach, welche Formen anwendbar sind.
Die Formate <host-source>
und <scheme-source>
müssen unzitiert bleiben, und alle anderen Formate müssen in einfache Anführungszeichen gesetzt werden.
'nonce-<nonce_value>'
Dieser Wert besteht aus der Zeichenkette nonce-
gefolgt von einem Zufallswert (Nonce). Der Nonce-Wert kann alle Zeichen aus Base64 oder URL-sicherem Base64 verwenden.
Diese Zeichenkette 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
-Attributes für beliebige <script>
- oder <style>
-Ressourcen, die sie aus dem Dokument laden möchten, einfügen.
Der Browser vergleicht den Wert der CSP-Direktive mit dem Wert im Element-Attribut und lädt die Ressource nur, wenn sie übereinstimmen.
Wenn eine Direktive einen Nonce und unsafe-inline
enthält, ignoriert der Browser unsafe-inline
.
Siehe Nonces im CSP-Leitfaden für mehr Nutzungshinweise.
'<hash_algorithm>-<hash_value>'
Dieser Wert besteht aus einer Zeichenkette, die einen Hash-Algorithmus identifiziert, gefolgt von -
, gefolgt von einem Hash-Wert. Der Hash-Wert kann alle Zeichen aus Base64 oder URL-sicherem Base64 verwenden.
- Der Hash-Algorithmus-Identifier 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, hashiert er den Inhalt aller <script>
- und <style>
-Elemente, vergleicht das Ergebnis mit allen Hashes in der CSP-Direktive und lädt die Ressource nur, wenn es eine Übereinstimmung gibt.
Wenn das Element eine externe Ressource lädt (zum Beispiel mit dem src
-Attribut), muss das Element auch das integrity
-Attribut gesetzt haben.
Wenn eine Direktive einen Hash und unsafe-inline
enthält, ignoriert der Browser unsafe-inline
.
Siehe Hashes im CSP-Leitfaden für mehr Nutzungshinweise.
<host-source>
Die URL oder IP-Adresse eines Hosts, 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 Dokuments-Ursprungs verwendet.
Beim Schemavergleich 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 und geben an, dass alle zulässigen Werte jedes Typs gültig sind. Zum Beispiel:
http://*.example.com
erlaubt Ressourcen von jeder Subdomain vonexample.com
, über HTTP oder HTTPS.
Pfade, die mit /
enden, entsprechen jedem Pfad, den sie als Präfix haben. Zum Beispiel:
example.com/api/
erlaubt Ressourcen vonexample.com/api/users/new
.
Pfade, die nicht mit /
enden, werden exakt abgeglichen. Zum Beispiel:
https://example.com/file.js
erlaubt Ressourcen vonhttps://example.com/file.js
, aber nicht vonhttps://example.com/file.js/file2.js
.
<scheme-source>
Ein Schema, wie https:
. Der Doppelpunkt ist erforderlich.
Sichere Upgrades sind erlaubt, daher:
http:
erlaubt auch Ressourcen, die mit HTTPS geladen werdenws:
erlaubt auch Ressourcen, die mit WSS geladen werden.
'self'
Ressourcen des gegebenen Typs dürfen nur vom gleichen Ursprung wie das Dokument geladen werden.
Sichere Upgrades sind erlaubt. Zum Beispiel:
- Wenn das Dokument von
http://example.com
bereitgestellt wird, erlaubt ein CSP von'self'
auch Ressourcen vonhttps://example.com
. - Wenn das Dokument von
ws://example.org
bereitgestellt wird, erlaubt ein CSP von'self'
auch Ressourcen vonwss://example.org
.
'unsafe-eval'
Standardmäßig, wenn ein CSP eine default-src
- oder script-src
-Direktive enthält, sind JavaScript-Funktionen, die ihre Argumente als JavaScript auswerten, deaktiviert. Dies schließt eval()
, das code
-Argument von setTimeout()
, oder den Function()
-Konstruktor mit 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 dies einen Großteil des Zwecks eines CSPs zunichtemacht.
Siehe eval()
und ähnliche APIs im CSP-Leitfaden für weitere Nutzungshinweise.
'wasm-unsafe-eval'
Standardmäßig, wenn ein CSP eine default-src
- oder script-src
-Direktive enthält, darf eine Seite kein WebAssembly mit Funktionen wie WebAssembly.compileStreaming()
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 ein CSP eine default-src
- oder script-src
-Direktive enthält, darf Inline-JavaScript nicht ausgeführt werden. Dies schließt ein:
- Inline-
<script>
-Tags - Inline-Ereignishandler-Attribute
javascript:
-URLs.
Ähnlich, wenn ein CSP eine default-src
- oder style-src
-Direktive 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, sodass all diese Formen geladen werden können.
Warnung:
Entwickler sollten 'unsafe-inline'
vermeiden, da dies einen Großteil des Zwecks eines CSPs zunichtemacht.
Siehe Inline-JavaScript im CSP-Leitfaden für weitere Nutzungshinweise.
'unsafe-hashes'
Standardmäßig, wenn ein CSP eine default-src
- oder script-src
-Direktive enthält, dürfen Inline-Ereignishandler-Attribute wie onclick
und Inline-style
-Attribute nicht ausgeführt werden.
Der Ausdruck 'unsafe-hashes'
erlaubt es dem Browser, Hash-Ausdrücke für Inline-Ereignishandler und style
-Attribute zu verwenden. Zum Beispiel könnte ein CSP eine Direktive wie diese enthalten:
script-src 'unsafe-hashes' 'sha256-cd9827ad...'
Wenn der Hash-Wert mit dem Hash eines Inline-Ereignishandler-Attributwertes oder eines style
-Attributwertes übereinstimmt, wird der Code erlaubt, ausgeführt zu werden.
Warnung:
Der Wert 'unsafe-hashes'
ist unsicher.
Insbesondere ermöglicht es einen Angriff, bei dem der Inhalt des Inline-Ereignishandler-Attributs als Inline-<script>
-Element in das Dokument eingefügt wird. Angenommen, der Inline-Ereignishandler ist:
<button onclick="transferAllMyMoney()">Transferiere mein ganzes Geld</button>
Wenn ein Angreifer ein Inline-<script>
-Element mit diesem Code injizieren kann, erlaubt das CSP es automatisch zu auszuführen.
Dennoch ist 'unsafe-hashes'
viel sicherer als 'unsafe-inline'
.
'inline-speculation-rules'
Standardmäßig, wenn ein CSP eine default-src
- oder script-src
-Direktive enthält, darf Inline-JavaScript nicht ausgeführt werden. Das '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 einem Skript durch ein Nonce oder einen Hash verliehen wird, auf Skripte, die dieses Skript dynamisch lädt, zum Beispiel durch das Erstellen neuer <script>
-Tags mit Document.createElement()
und deren Einfügen in das Dokument mit Node.appendChild()
.
Wenn dieses Schlüsselwort in einer Direktive vorhanden ist, dann werden alle folgenden Source-Expression-Werte ignoriert:
Siehe Das strict-dynamic
-Schlüsselwort im CSP-Leitfaden für weitere Nutzungshinweise.
'report-sample'
Wenn dieser Ausdruck in einer Direktive enthalten ist, die Skripte oder Stile steuert, und die Direktive dazu führt, dass der Browser einige Inline-Skripte, Inline-Stile oder Ereignishandler-Attribute blockiert, dann enthält der Verstoßbericht, den der Browser generiert, eine sample
-Eigenschaft, die die ersten 40 Zeichen der blockierten Ressource enthält.
CSP in Workern
Worker werden im Allgemeinen nicht von der Content-Security-Policy des Dokuments (oder Eltern-Workers) geregelt, das sie erstellt hat. Um eine Content-Security-Policy für den Worker anzugeben, setzen Sie einen Content-Security-Policy
-Antwortheader für die Anfrage, 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 Daten oder Blob hat). In diesem Fall erbt der Worker die Content-Security-Policy des Dokuments oder des Workers, der ihn erstellt hat.
Mehrere Content-Security-Policies
Der CSP-Mechanismus ermöglicht es, mehrere Richtlinien für eine Ressource anzugeben, einschließlich über den Content-Security-Policy
-Header, den Content-Security-Policy-Report-Only
-Header und ein <meta>
-Element.
Sie können den Content-Security-Policy
-Header mehr als einmal verwenden, wie im untenstehenden Beispiel. Achten Sie besonders auf die connect-src
-Direktive hier. Auch wenn die zweite Richtlinie die Verbindung erlauben würde, enthält die erste Richtlinie connect-src 'none'
. Das Hinzufügen zusätzlicher Richtlinien kann nur weiter einschränken die Fähigkeiten der geschützten Ressource, was bedeutet, dass keine Verbindung erlaubt ist 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
Unsicheren Inline-Code deaktivieren und nur HTTPS-Ressourcen zulassen
Dieser HTTP-Header setzt die Standardrichtlinie, nur das Laden von Ressourcen (Bilder, Schriften, Skripte, etc.) über HTTPS zu erlauben.
Da die Direktiven unsafe-inline
und unsafe-eval
nicht gesetzt sind, werden Inline-Skripte blockiert.
Content-Security-Policy: default-src https:
Dieselben Einschränkungen können mit dem HTML <meta>
-Element angewendet werden.
<meta http-equiv="Content-Security-Policy" content="default-src https:" />
Inline-Code und HTTPS-Ressourcen erlauben, aber Plugins deaktivieren
Diese Richtlinie könnte auf einer bereits existierenden Seite verwendet werden, die zu viel Inline-Code verwendet, um es zu beheben, 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 erzwingen beim Testen
Dieses Beispiel setzt dieselben Einschränkungen wie das vorherige Beispiel, aber unter Verwendung des Content-Security-Policy-Report-Only
-Headers und der report-to
-Direktive.
Dieser Ansatz wird während des Testens verwendet, um Verstöße zu melden, aber keinen Code am Ausführen zu hindern.
Endpunkte (URLs), an die Berichte gesendet werden, werden mit dem Reporting-Endpoints
-HTTP-Antwortheader definiert.
Reporting-Endpoints: csp-endpoint="https://example.com/csp-reports"
Ein bestimmter Endpunkt wird dann als Berichtsziel in der CSP-Richtlinie mit der report-to
-Direktive 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
-Direktive auch oben angegeben ist, da report-to
noch nicht umfassend von Browsern unterstützt wird.
Siehe Content Security Policy (CSP)-Implementierung für weitere Beispiele.
Spezifikationen
Specification |
---|
Content Security Policy Level 3 # csp-header |
Browser-Kompatibilität
Siehe auch
Content-Security-Policy-Report-Only
- Lernen Sie über: Content Security Policy
- Content-Security in WebExtensions
- Annahme einer strikten Richtlinie
- CSP Evaluator - Bewerten Sie Ihre Content-Security-Policy