X-XSS-Protection
Kein Standard: Diese Funktion ist nicht standardisiert und befindet sich nicht im Standardisierungsprozess. Verwenden Sie sie nicht auf Produktionsseiten, die auf das Web ausgerichtet sind: Sie wird nicht für alle Benutzer funktionieren. Außerdem kann es große Inkompatibilitäten zwischen Implementierungen geben und das Verhalten kann sich in Zukunft ändern.
Der HTTP-Header X-XSS-Protection
war eine Funktion von Internet Explorer, Chrome und Safari, die das Laden von Seiten stoppte, wenn reflektierte Cross-Site-Scripting-Angriffe (XSS) erkannt wurden. Diese Schutzmaßnahmen sind in modernen Browsern weitgehend unnötig, wenn Websites eine starke Content-Security-Policy
implementieren, die die Verwendung von inline JavaScript ('unsafe-inline'
) deaktiviert.
Warnung: Obwohl diese Funktion Benutzer älterer Webbrowser, die noch keine Unterstützung für CSP haben, schützen kann, kann der XSS-Schutz in einigen Fällen XSS-Schwachstellen in ansonsten sicheren Websites erzeugen. Weitere Informationen finden Sie im Abschnitt unten.
Hinweis:
- Chrome hat den XSS Auditor entfernt
- Firefox hat ihn nicht und wird auch nicht
X-XSS-Protection
implementieren - Edge hat ihren XSS-Filter eingestellt
Das bedeutet, wenn Sie keine Unterstützung für veraltete Browser benötigen, wird empfohlen, Content-Security-Policy
ohne zulässige unsafe-inline
-Skripte zu verwenden.
Header-Typ | Response Header |
---|---|
Verbotener Header-Name | Nein |
Syntax
X-XSS-Protection: 0
X-XSS-Protection: 1
X-XSS-Protection: 1; mode=block
X-XSS-Protection: 1; report=<reporting-uri>
- 0
-
Deaktiviert das XSS-Filtering.
- 1
-
Aktiviert das XSS-Filtering (in der Regel in Browsern standardmäßig). Wenn ein Cross-Site-Scripting-Angriff erkannt wird, wird der Browser die Seite bereinigen (die unsicheren Teile entfernen).
- 1; mode=block
-
Aktiviert das XSS-Filtering. Anstatt die Seite zu bereinigen, wird der Browser das Rendern der Seite verhindern, wenn ein Angriff erkannt wird.
- 1; report=<reporting-URI> (nur Chromium)
-
Aktiviert das XSS-Filtering. Wenn ein Cross-Site-Scripting-Angriff erkannt wird, bereinigt der Browser die Seite und meldet den Verstoß. Dies nutzt die Funktionalität der CSP
report-uri
-Direktive, um einen Bericht zu senden.
Schwachstellen verursacht durch XSS-Filtering
Betrachten Sie das folgende Beispiel von HTML-Code für eine Webseite:
<script>
var productionMode = true;
</script>
<!-- [...] -->
<script>
if (!window.productionMode) {
// Some vulnerable debug code
}
</script>
Dieser Code ist völlig sicher, wenn der Browser kein XSS-Filtering durchführt. Führt er es jedoch aus und die Suchabfrage ist ?something=%3Cscript%3Evar%20productionMode%20%3D%20true%3B%3C%2Fscript%3E
, könnte der Browser die Skripte auf der Seite ausführen und <script>var productionMode = true;</script>
ignorieren (in der Annahme, der Server habe es in die Antwort eingefügt, weil es in der URI war), wodurch window.productionMode
als undefined
ausgewertet wird und unsicherer Debug-Code ausgeführt wird.
Das Setzen des X-XSS-Protection
Headers auf entweder 0
oder 1; mode=block
verhindert Schwachstellen wie die oben beschriebene. Ersteres würde den Browser alle Skripte ausführen lassen, und letzteres würde verhindern, dass die Seite überhaupt verarbeitet wird (obwohl dieser Ansatz anfällig für Seitenkanalangriffe sein könnte, sofern die Website in einem <iframe>
eingebettet werden kann).
Beispiel
Blockieren Sie das Laden von Seiten, wenn reflektierte XSS-Angriffe erkannt werden:
X-XSS-Protection: 1; mode=block
PHP
header("X-XSS-Protection: 1; mode=block");
Apache (.htaccess)
<IfModule mod_headers.c>
Header set X-XSS-Protection "1; mode=block"
</IfModule>
Nginx
add_header "X-XSS-Protection" "1; mode=block";
Spezifikationen
Nicht Teil von Spezifikationen oder Entwürfen.
Browser-Kompatibilität
BCD tables only load in the browser