Content-Security-Policy

Nach CSP Level 3 (W3C WD)

Strict-CSP-Header mit Nonces statt unsafe-inline, BSI-IT-Grundschutz-konform.

Was ist das, und wann brauche ich es?

Was ist das?

Die Content-Security-Policy (CSP, Level 3) ist ein HTTP-Antwort-Header, mit dem Sie dem Browser sagen: aus welchen Quellen darf er Skripte, Bilder, Schriften, iFrames usw. überhaupt laden. Alles, was nicht in der Liste steht, wird blockiert.

Damit unterbinden Sie Cross-Site-Scripting (XSS) und das Einschleusen fremder Skripte über kompromittierte Drittanbieter - die heute häufigste Angriffsklasse auf Web-Anwendungen.

Wichtig: der Header gehört in die Server-Konfiguration (Nginx, Apache, Caddy, IIS) - nicht als <meta>-Tag in HTML; dort wird er teilweise ignoriert und ist weniger streng.

Wann brauche ich das?

Für jede selbst gehostete Web-Anwendung mit Benutzer-Login, Formularen oder eingebetteten Drittanbieter-Skripten (Analytics, Maps, Embeds). Bei rein statischen Marketing-Seiten ohne Eingabefelder geringer Mehrwert, aber Best-Practice für die BSI-IT-Grundschutz-Konformität.

Roll-out: erst mit Content-Security-Policy-Report-Only und Report-Endpoint testen, dann nach 2-4 Wochen ohne Verstöße auf scharf schalten.

CSP-Begriffs-Hilfe
Eine Direktive listet erlaubte Quellen. Werte: 'self' = eigene Origin, 'none' = nichts, 'unsafe-inline'/'unsafe-eval' = entwertet die CSP, https://cdn.example.com = nur diese Host-Origin, data: = data-URLs, 'sha256-…' = bestimmter Inline-Hash. Mehrere Werte mit Leerzeichen trennen.
HTTP-Header nach CSP Level 3 (W3C WD)
Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-{NONCE}' 'strict-dynamic'; style-src 'self' 'nonce-{NONCE}'; img-src 'self' data:; connect-src 'self'; font-src 'self'; frame-src 'none'; frame-ancestors 'none'; form-action 'self'; base-uri 'none'; object-src 'none'; manifest-src 'self'; worker-src 'self'; media-src 'self'; upgrade-insecure-requests

Kostenlos, ohne Gewähr (Best-Effort). Erzeugte wie geprüfte Angaben sind unverbindlich; für fehlerhafte oder unvollständige Ergebnisse und Konfigurationen übernehmen wir keine Haftung. Anwendung und Prüfung erfolgen in eigener Verantwortung, vor dem Produktiveinsatz bitte testen.

Free, no warranty (best effort). Generated and inspected values are non-binding; we accept no liability for erroneous or incomplete results or configurations. Use and verification are your own responsibility; please test before production use.

Nur Header-Wert nach CSP Level 3 (W3C WD)
default-src 'self'; script-src 'self' 'nonce-{NONCE}' 'strict-dynamic'; style-src 'self' 'nonce-{NONCE}'; img-src 'self' data:; connect-src 'self'; font-src 'self'; frame-src 'none'; frame-ancestors 'none'; form-action 'self'; base-uri 'none'; object-src 'none'; manifest-src 'self'; worker-src 'self'; media-src 'self'; upgrade-insecure-requests

Kostenlos, ohne Gewähr (Best-Effort). Erzeugte wie geprüfte Angaben sind unverbindlich; für fehlerhafte oder unvollständige Ergebnisse und Konfigurationen übernehmen wir keine Haftung. Anwendung und Prüfung erfolgen in eigener Verantwortung, vor dem Produktiveinsatz bitte testen.

Free, no warranty (best effort). Generated and inspected values are non-binding; we accept no liability for erroneous or incomplete results or configurations. Use and verification are your own responsibility; please test before production use.

{NONCE} ist ein Platzhalter, den Ihr Server pro Request durch einen frisch generierten, kryptographisch zufälligen Wert ersetzen muss (mindestens 128 Bit Entropie, base64-encoded). Derselbe Wert muss als Attribut nonce="..." an jedem inline-Skript stehen, das die Seite ausliefert.

report-to ist die moderne Variante des CSP-Reportings. Sie braucht einen begleitenden HTTP-Response-Header der Form Reporting-Endpoints: default="https://example.com/csp-report". Ohne diesen Header zeigt der Browser zwar Verstöße in der Konsole, sendet aber keine Berichte. report-uri ist deprecated, wird aber von allen aktuellen Browsern weiterhin gelesen und ist der einzige Reporting-Mechanismus, den Firefox aktuell unterstützt - daher parallel setzen.

Hinweis BSI APP.3.1: Eine strikte CSP ist eine Defense-in-Depth-Maßnahme - sie fügt sich neben Output-Encoding, HttpOnly-Cookies und SameSite-Attributen in die Schichten gegen XSS und Clickjacking ein. Eine Nonce-basierte Strict-CSP nach Google-Pattern setzt 'strict-dynamic' voraus, sonst werden dynamisch eingefügte Skripte blockiert.

Security-Header einer URL prüfen

Holt die URL und prüft CSP plus alle gängigen Web-Security-Header (HSTS, X-Content-Type-Options, Permissions-Policy etc.).

Probieren mit:

Server-Pfad: Diese Inspektion läuft NICHT browser-lokal. Wir holen den DNS-Record bzw. die HTTPS-Antwort über unseren Server. Wir loggen weder die abgefragte Domain noch das Ergebnis. 12 Anfragen pro Minute pro IPv4-Adresse bzw. IPv6-/64-Subnet.