X-XSS-Protection: HTTP-Security-Header zum Schutz vor XSS-Angriffen
Der HTTP-Security-Header X-XSS-Protection ist zum Schutz vor reflektierten (engl. reflected) Cross-Site-Scripting (XSS)-Angriffen gedacht. Dieser HTTP-Header wird aber nur noch von älterern Webbrowsern, wie z.B. dem Internet Explorer 11, unterstützt. Heutzutage sollte stattdessen lieber eine strikte Content-Security-Policy (CSP) verwendet werden. Der vollständigkeitshalber soll der X-XSS-Protection-Header im Rahmen der Beitragsserie HTTP-Security-Header in diesem Beitrag aber kurz vorgestellt werden.
X-XSS-Protection - Beschreibung & Funktionsweise
Um dem Webbrowser mitzuteilen, wie dieser mit Reflected-XSS umgehen soll, kann der X-XSS-Protection-Header vom Webserver in der HTTP-Antwort der angefragten Webseite bzw. Ressource mitgesendet werden:
Bei dem o.a. Beispiel würde der Webbrowser, sollte dieser einen XSS-Angriff erkennen, das Laden der Webseite verhindern.
Header-Einstellungen im Detail
Es werden folgende vier Einstellungswerte vom X-XSS-Protection-Header unterstützt:
0
Deaktiviert den XSS-Filter des Webbrowsers.
1
Aktiviert bzw. erzwingt den XSS-Filter des Webbrowsers (im Normalfall der Standard von Webbrowsern). Registriert der Webbrowser eine XSS-Attacke, so wird der schadhafte Code vom Webbrowser entfernt.
1; mode=block
In diesem Fall wird die Webseite erst gar nicht vom Webbrowser gerendert bzw. ausgeführt, sofern ein XSS-Angriff festgestellt wird.
1; report=reportingUri
Dieser Wert wurde nur von Chrome unterstützt. Verhält sich wie bei 1
nur, dass ein Report des Vorfalls an die hinterlegte URL gesendet wird.
Webbrowser-Unterstützung
Wie bereits in der Einleitung erwähnt, wird dieser Header nur von älteren Legacy-Webbrowsern unterstützt. (siehe caniuse.com).
X-XSS-Protection-Header übertragen
Damit der Webserver den Header überträgt, muss dieser im Allgemeinen entsprechend konfiguriert werden.
Apache:
In der Konfigurationsdatei von Apache oder in der .htaccess
ist folgende Anweisung zu hinterlegen:
nginx:
Analog dazu ist für nginx in der Konfigurationsdatei Folgendes einzufügen:
X-XSS-Protection-Einstellung von codingblatt.de
Ich selbst verwende den Header für meinen Blog mit der Einstellung 1; mode=block
.
Fazit
Der vorgestellte X-XSS-Protection-Header ist eigentlich nur noch als Fallback für ältere Webbrowser sinnvoll. Für alle modernen Webbrowser sollte eine entsprechend konfigurierte Content-Security-Policy (CSP) zum Einsatz kommen.