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:

HTTP/2 200 OK
date: Sun, 15 Mar 2020 14:30:45 GMT
content-type: text/plain; charset=UTF-8
content-length: 2802
x-xss-protection: 1; mode=block
HTTP-Antwort mit X-XSS-Protection

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:

Header always set X-XSS-Protection "1; mode=block"
Apache-Konfigurationsdatei bzw. .htacess

nginx:
Analog dazu ist für nginx in der Konfigurationsdatei Folgendes einzufügen:

add_header X-XSS-Protection "1; mode=block";
nginx-Konfigurationsdatei

X-XSS-Protection-Einstellung von coding.blatt

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.

Feedback

Für Feedback zum Beitrag, seien es Fragen, Korrigierungen und/oder Anregungen, könnt ihr mir gerne eine Nachricht per E-Mail oder Mastodon schreiben (siehe Kontakt).