CSP-Header-Validator
Fügen Sie den Wert eines Content-Security-Policy-Headers ein, um dessen Direktiven und Quellwerte in einem Durchgang zu validieren. Erkennt riskante Einstellungen wie unsafe-inline, ein fehlendes default-src als Fallback sowie Tippfehler in Direktivennamen und zeigt in einer visuellen Übersicht die erlaubten Quellen jeder Direktive.
Tipps
- CSP wird normalerweise als HTTP-Antwort-Header ausgeliefert, kann aber auch über ein
<meta http-equiv="Content-Security-Policy">-Tag gesetzt werden (Direktiven wie report-uri haben dort allerdings keine Wirkung). - Bevor Sie CSP produktiv ausrollen, probieren Sie zunächst den Header Content-Security-Policy-Report-Only aus — er sammelt nur Verstoßberichte, sodass Sie die Auswirkungen auf bestehende Funktionen einschätzen können, ohne etwas zu beschädigen.
- Platzhalter (*) und 'unsafe-inline' erleichtern die Entwicklung, untergraben aber einen Großteil des XSS-Schutzes von CSP. Verschärfen Sie eine lockere Richtlinie immer, bevor Sie sie produktiv einsetzen.
- Dieselbe Direktive zweimal zu wiederholen führt nicht zu einer Zusammenführung der Werte — nur das erste Vorkommen greift. Um Quellen hinzuzufügen oder zu überschreiben, halten Sie alles in einer einzigen Direktive.
- Die DevTools-Konsole Ihres Browsers zeigt blockierte Ressourcen als rote „Refused to load...“-Meldung an, weshalb sie beim Debuggen einer zu strengen CSP der erste Anlaufpunkt ist.
Häufige Fragen
Übrigens – Warum es CSP überhaupt gibt: Escaping allein reichte nie aus, um XSS zu stoppen
Content Security Policy geht auf eine Idee zurück, die Robert Hansen um 2004 in den Raum stellte und die der Mozilla-Ingenieur Brandon Sterne ab etwa 2008 zu einer formalen Spezifikation ausarbeitete, was 2012 zur ersten W3C Candidate Recommendation (Level 1) führte. Cross-Site-Scripting (XSS) galt damals als eine der drängendsten Web-Schwachstellen, und es wurde klar, dass sich allein auf die Sorgfalt der Entwickler zu verlassen – „jede Ausgabe korrekt escapen“ – keine robuste Verteidigung war. CSP wurde als Mechanismus für gestaffelte Verteidigung entworfen, der es dem Browser selbst erlaubt, Beschränkungen darüber durchzusetzen, woher Skripte stammen dürfen.
CSP Level 2 führte Nonce- und Hash-basierte Freigaben für Inline-Skripte ein, sodass Websites bestimmten Inline-Code erlauben konnten, ohne auf 'unsafe-inline' zurückzugreifen. Level 3 fügte anschließend 'strict-dynamic' hinzu, das Skripten, die von einem bereits vertrauenswürdigen Skript dynamisch nachgeladen werden, automatisch vertraut und so den Pflegeaufwand host-basierter Positivlisten bei großen Websites drastisch senkt.
Google setzt in seinen eigenen groß angelegten Diensten kontinuierlich strikte, Nonce-basierte CSP ein und hat aus dieser Arbeit Forschungsergebnisse veröffentlicht, wonach host-basierte Positivlisten häufig umgangen werden können, während Nonce- oder Hash-basierte Richtlinien in der Praxis deutlich wirksamer sind. Dieser Befund wird heute vielfach als CSP-Best-Practice zitiert und unterstreicht, dass die eigentliche Designentscheidung nicht nur lautet, „welche Werte verboten werden“, sondern von vornherein, „auf welcher Whitelisting-Strategie überhaupt aufgebaut wird“.