X-XSS-Protection

Nicht standardisiert: Diese Funktion ist nicht standardisiert und befindet sich nicht auf dem Weg zur Standardisierung. Verwenden Sie sie nicht auf Produktionsseiten, die dem Web ausgesetzt sind: Sie funktioniert nicht für alle Benutzer. Es kann auch große Inkompatibilitäten zwischen Implementierungen geben, und das Verhalten kann sich in Zukunft ändern.

Veraltet: Diese Funktion wird nicht mehr empfohlen. Obwohl einige Browser sie möglicherweise noch unterstützen, könnte sie bereits aus den relevanten Webstandards entfernt worden sein, in Kürze entfernt werden oder nur noch aus Kompatibilitätsgründen bestehen. Vermeiden Sie die Verwendung und aktualisieren Sie vorhandenen Code, falls möglich; siehe die Kompatibilitätstabelle am Ende dieser Seite, um Ihre Entscheidung zu unterstützen. Beachten Sie, dass diese Funktion jederzeit aufhören könnte zu funktionieren.

Warnung: Auch wenn dieses Feature Benutzer älterer Webbrowser schützen kann, die CSP nicht unterstützen, kann X-XSS-Protection in manchen Fällen XSS-Schwachstellen auf ansonsten sicheren Webseiten erzeugen. Weitere Informationen finden Sie im Abschnitt Sicherheitsüberlegungen weiter unten.

Der HTTP-X-XSS-Protection-Response-Header war eine Funktion von Internet Explorer, Chrome und Safari, die verhinderte, dass Seiten geladen wurden, wenn reflektierte Cross-Site-Scripting-Angriffe (XSS) erkannt wurden. Diese Schutzmaßnahmen sind in modernen Browsern weitgehend überflüssig, wenn Websites eine starke Content-Security-Policy implementieren, die die Verwendung von inline JavaScript ('unsafe-inline') deaktiviert.

Es wird empfohlen, anstelle des XSS-Filters Content-Security-Policy zu verwenden.

Header-Typ Response-Header
Verbotener Header-Name Nein

Syntax

http
X-XSS-Protection: 0
X-XSS-Protection: 1
X-XSS-Protection: 1; mode=block
X-XSS-Protection: 1; report=<reporting-uri>

Direktiven

0

Deaktiviert die XSS-Filterung.

1

Aktiviert die XSS-Filterung (in der Regel Standard in Browsern). Wenn ein Cross-Site-Scripting-Angriff erkannt wird, bereinigt der Browser die Seite (entfernt die unsicheren Teile).

1; mode=block

Aktiviert die XSS-Filterung. Anstatt die Seite zu bereinigen, verhindert der Browser die Anzeige der Seite, wenn ein Angriff erkannt wird.

1; report=<reporting-URI> (nur Chromium)

Aktiviert die XSS-Filterung. 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.

Sicherheitsüberlegungen

Durch XSS-Filterung verursachte Schwachstellen

Betrachten Sie den folgenden Ausschnitt von HTML-Code für eine Webseite:

html
<script>
  var productionMode = true;
</script>
<!-- [...] -->
<script>
  if (!window.productionMode) {
    // Some vulnerable debug code
  }
</script>

Dieser Code ist völlig sicher, wenn der Browser keine XSS-Filterung durchführt. Wenn dies jedoch der Fall ist und die Suchanfrage ?something=%3Cscript%3Evar%20productionMode%20%3D%20true%3B%3C%2Fscript%3E lautet, könnte der Browser die Skripte auf der Seite ausführen, wobei er <script>var productionMode = true;</script> ignoriert (weil er denkt, der Server hat es aufgrund der URI in die Antwort eingefügt), wodurch window.productionMode auf undefined gesetzt wird und der unsichere 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, während letzteres verhindern würde, dass die Seite überhaupt verarbeitet wird (obwohl dieser Ansatz anfällig für Seitenkanalangriffe sein könnte, wenn die Website in einem <iframe> eingebettet werden kann).

Beispiel

Verhindern, dass Seiten geladen werden, wenn sie reflektierte XSS-Angriffe erkennen:

http
X-XSS-Protection: 1; mode=block

PHP

php
header("X-XSS-Protection: 1; mode=block");

Apache (.htaccess)

apacheconf
<IfModule mod_headers.c>
  Header set X-XSS-Protection "1; mode=block"
</IfModule>

Nginx

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

Spezifikationen

Teil keiner Spezifikationen oder Entwürfe.

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch