Curious TechieDev Toolbox
Alle Leitfäden/Sicherheit10 min read

Was ist Content Security Policy (CSP) und wie verhindert man XSS?

Meistern Sie CSP Level 3: Richtliniensyntax, strikte Nonce-Implementierung, Hash-Verifikation und Zero-Trust-Sicherheit.

Wichtigste Erkenntnisse
  • CSP ist ein HTTP-Header, der einschränkt, von welchen Quellen Skripte, Styles und Inhalte geladen werden dürfen.
  • Es dient als primäre Verteidigungslinie gegen Cross-Site-Scripting (XSS) und böswillige Dateninjektionen.
  • Modernes CSP Level 3 setzt auf kryptographische Nonces und Hashes statt unsicherer Domain-Allowlists.
  • frame-ancestors 'none' löst das veraltete X-Frame-Options gegen Clickjacking ab.
  • Mit Content-Security-Policy-Report-Only können Richtlinien im Live-Betrieb gefahrlos geprüft werden.

1. Was ist die Content Security Policy (CSP)?

Die Content Security Policy (CSP) ist ein vom W3C standardisierter HTTP-Header, mit dem Webseiten deklarieren, welche Ressourcen der Browser laden und ausführen darf.

Indem sie Quellen für Skripte, Stylesheets und Netzwerkanfragen einschränkt, ist die CSP die stärkste Verteidigungslinie gegen Cross-Site Scripting (XSS).

2. Die wichtigsten Direktiven im Überblick

DIREKTIVEKONTROLLIERTSICHERE EMPFEHLUNG
default-srcFallback für alle nicht deklarierten Fetch-Direktiven'self'
script-srcZulässige Ausführungsquellen für JavaScript'self' 'nonce-...'
style-srcZulässige Quellen für CSS und Inline-Styles'self' 'unsafe-inline'
connect-srcErlaubte Ziele für Fetch, XHR und WebSockets'self' https://api.domain.com
frame-ancestorsDomains, die diese Seite in <iframe> einbetten dürfen'none'

3. Nonce- vs. Hash-basierte Richtlinien

Frühere CSP-Versionen verließen sich auf Domain-Whitelists, die jedoch anfällig für Umgehungen auf CDNs waren. Moderne Standards setzen auf kryptografische Nonces.

Strikte CSP (Level 3) löst dies durch einmalige Nonces pro Anfrage:

Content-Security-Policy: script-src 'nonce-rAnd0m123' 'strict-dynamic'; object-src 'none';

4. Frame Ancestors vs. X-Frame-Options

Während X-Frame-Options: DENY noch aus Kompatibilitätsgründen existiert, bietet die CSP-Direktive frame-ancestors flexiblere Kontrolle gegen Clickjacking.

5. Rollout-Plan in 3 Schritten

Phase 1: Nur-Bericht-Modus (Report-Only): Starten Sie mit <code>Content-Security-Policy-Report-Only</code>, um Sicherheitsverletzungen ohne Ausfälle zu protokollieren.
Phase 2: Bereinigung von Inline-Code: Überführen Sie <code>onclick="..."</code>-Attribute in externe JavaScript-Event-Listener.
Phase 3: Strikte Durchsetzung: Aktivieren Sie <code>Content-Security-Policy</code> mit <code>object-src 'none'</code> zur vollständigen Absicherung.