flawopen.com/XSS/CSP vs. escape
CSP und Output-Escaping: Sind beide nötig?
Kontextgerechte Ausgabekodierung fügt nicht vertrauenswürdige Werte als Daten statt als ausführbares Markup ein. Eine Content Security Policy (CSP) ist eine zweite Schutzschicht: Wie ein Wachposten prüft sie, welche Skripte laufen und wohin sie sich verbinden dürfen. So kann sie bestimmtes injiziertes Verhalten blockieren, wenn eine Kodierungslücke besteht. Die Lücke selbst behebt sie nicht; eine zu offene Policy hält das Skript möglicherweise nicht auf.
Aufgabe der beiden Schutzmaßnahmen
Kodiere Daten dort, wo sie in einen Ausgabekontext gelangen. HTML-Text, zitierte Attribute, JavaScript, CSS und URL-Bestandteile werden unterschiedlich geparst; der passende Encoder richtet sich nach dem genauen Kontext. Bevorzuge Framework-Templates und sichere DOM-Sinks und vermeide ausführbare Kontexte wie Inline-Skripte und Event-Handler-Attribute. Das ist die primäre XSS-Abwehr.
Eine durchgesetzte Content-Security-Policy kann Inline-Skripte, Script-Quellen und Ziele wie connect-src beschränken. Bei einer Kodierungslücke kann eine sorgfältige Policy ein bestimmtes Skript oder eine Verbindung blockieren. Das hängt von Policy und Browser ab: CSP garantiert nicht, jedes Payload, Datenleck oder Script-Gadget zu stoppen; die Injection bleibt bestehen.
Warum CSP die Ausgabekodierung nicht ersetzt
Eine offene oder falsch konfigurierte Policy kann die Injection ausführbar lassen. 'unsafe-inline' schwächt etwa den Schutz vor Inline-Skripten; breite Hostlisten können ebenfalls scriptfähige Endpunkte zulassen. CSP-Direktiven haben unterschiedliche Aufgaben: Eine Beschränkung von script-src braucht möglicherweise ein bewusst gesetztes connect-src, um Netzwerkziele einzuschränken. Content-Security-Policy-Report-Only meldet Verstöße, blockiert sie aber nicht. Nutze Kodierung als Korrektur und CSP als zusätzliche Schutzschicht.
Häufige Fragen
Erfasse benötigte Skripte und teste eine Nonce- oder Hash-basierte Policy ohne 'unsafe-inline' und 'unsafe-eval'. Mit Content-Security-Policy-Report-Only findest du Konflikte; sie erzwingt die Policy nicht. Prüfe Berichte, passe legitime Abhängigkeiten an und aktiviere anschließend eine durchgesetzte Content-Security-Policy. Behalte kontextgerechte Kodierung während des gesamten Rollouts bei.
Quellen
- OWASP — Content Security Policy Cheat Sheet
- OWASP — Cross-Site-Scripting-Prävention
- MDN — Content Security Policy einführen
- W3C — Content Security Policy Level 3