CSP teilt dem Browser mit, von wo er Skripte, Styles, Bilder und andere Ressourcen laden darf. Ein korrekt konfigurierter CSP stoppt die meisten XSS-Angriffe, denn selbst wenn ein Angreifer ein schaedliches Skript in die Seite injiziert, weigert sich der Browser, es auszufuehren, wenn es nicht zur Policy passt. CSP ist die wirksamste Verteidigung gegen XSS nach der Eingabebereinigung — und im Gegensatz zur Bereinigung funktioniert es auch gegen Zero-Day-Schwachstellen.
Grundlegender CSP¶
Content-Security-Policy:
default-src 'self';
script-src 'self' 'nonce-abc123';
style-src 'self' 'unsafe-inline';
img-src 'self' data: https:;
connect-src 'self' https://api.example.com;
frame-ancestors 'none';
Jede Direktive definiert erlaubte Quellen fuer einen bestimmten Inhaltstyp. default-src 'self' erlaubt nur Ressourcen vom eigenen Ursprung. script-src mit Nonce erlaubt nur Skripte mit entsprechendem Nonce-Attribut. frame-ancestors 'none' verhindert das Einbetten der Seite in einen iframe (Clickjacking-Schutz).
Nonce-basierter CSP¶
import secrets
@app.after_request
def add_csp(response):
nonce = secrets.token_urlsafe(32)
response.headers['Content-Security-Policy'] = f"script-src 'self' 'nonce-{nonce}'"
return response
Ein Nonce (Number Used Once) ist ein Zufallswert, der fuer jeden Request generiert wird. Jedes legitime <script>-Tag erhaelt ein nonce="abc123"-Attribut und CSP erlaubt nur Skripte mit passendem Nonce. Ein injiziertes Skript ohne korrektes Nonce wird nicht ausgefuehrt. Nonces sind sicherer als hash-basierte Ansaetze, da sie den Skriptinhalt nicht im Voraus kennen muessen.
Schrittweise Einfuehrung¶
- Report-Only mit permissiver Policy — erfahren Sie, was CSP blockieren wuerde
- Berichte analysieren — identifizieren Sie legitime Quellen und Inline-Skripte
- Policy verschaerfen — entfernen Sie unnoetige Quellen
- Auf Enforcement umschalten — CSP beginnt zu blockieren
- Berichte ueberwachen — erkennen Sie neue Quellen und potenzielle Angriffe
Die Einfuehrung von CSP ohne Report-Only-Phase bricht typischerweise die Anwendung. Ein Reporting-Endpoint (report-uri oder report-to) sammelt Informationen ueber blockierte Ressourcen und ermoeglicht iteratives Verschaerfen der Policy.
Wichtigste Erkenntnis¶
CSP ist die wirksamste Verteidigung gegen XSS. Beginnen Sie mit Report-Only, verschaerfen Sie schrittweise und ueberwachen Sie Berichte. Nonce-basierter CSP ist der empfohlene Ansatz fuer moderne Anwendungen.