TL; DR: Alle gut geschriebenen Websites (/ Apps) müssen Header ausgeben X-XSS-Protection: 0
und diese Funktion einfach vergessen. Wenn Sie zusätzliche Sicherheit wünschen, die bessere Benutzeragenten bieten können, verwenden Sie einen strengen Content-Security-Policy
Header.
Lange Antwort:
Der HTTP-Header X-XSS-Protection
ist eines der Dinge, die Microsoft in Internet Explorer 8.0 (MSIE 8) eingeführt hat, um die Sicherheit falsch geschriebener Websites zu verbessern.
Die Idee ist, eine Art Heuristik anzuwenden, um zu versuchen, einen Reflexions-XSS-Angriff zu erkennen und den Angriff automatisch zu neutralisieren.
Der problematische Teil davon ist "Heuristik" und "Kastration". Die Heuristik führt zu Fehlalarmen und die Kastration kann nicht sicher durchgeführt werden, da sie Nebenwirkungen verursacht, mit denen XSS-Angriffe und DoS-Angriffe auf absolut sichere Websites implementiert werden können.
Der schlechte Teil ist, dass sich X-XSS-Protection
der Browser so verhält, als ob der Header ausgegeben X-XSS-Protection: 1
worden wäre , wenn eine Website den Header nicht ausgibt. Das Schlimmste ist, dass dieser Wert der am wenigsten sichere Wert aller möglichen Werte für diesen Header ist!
Für eine gegebene sichere Website dieses „XSS - Schutz“ -Funktion (das heißt, funktioniert die Seite nicht Reflexion XSS - Schwachstellen hat) ermöglicht folgende Angriffe:
X-XSS-Protection: 1
Ermöglicht dem Angreifer, Teile von JavaScript selektiv zu blockieren und den Rest der Skripte am Laufen zu halten. Dies ist möglich, weil die Heuristiken dieser Funktion einfach lauten: "Wenn der Wert eines GET-Parameters im Skriptteil der Seitenquelle gefunden wird, wird das Skript automatisch in Abhängigkeit vom Benutzeragenten geändert." In der Praxis kann der Angreifer z. B. Parameter hinzufügen, disablexss=<script src="framebuster.js"
und der Browser entfernt die Zeichenfolge automatisch <script src="framebuster.js"
aus der eigentlichen Seitenquelle. Beachten Sie, dass der Rest der Seite weiterhin ausgeführt wird und der Angreifer diesen Teil der Seitensicherheit entfernt hat. In der Praxis kann jedes JS in der Seitenquelle geändert werden. In einigen Fällen kann eine Seite ohne XSS-Sicherheitsanfälligkeit mit reflektiertem Inhalt verwendet werden, um aufgrund der Kastration ausgewähltes JavaScript auf einer Seite auszuführen indem er Klartextdaten fälschlicherweise in ausführbaren JavaScript-Code umwandelt .
X-XSS-Protection: 1; mode=block
Ermöglicht es dem Angreifer, Daten aus der Seitenquelle zu verlieren, indem das Verhalten der Seite als Seitenkanal verwendet wird. Wenn die Seite beispielsweise JavaScript-Code in var csrf_secret="521231347843"
Anlehnung an enthält , fügt der Angreifer einfach einen zusätzlichen Parameter hinzu, z. B. leak=var%20csrf_secret="3
und wenn die Seite NICHT blockiert ist, wird der3
war die erste Ziffer falsch. Der Angreifer versucht es erneut, diesmal wird leak=var%20csrf_secret="5
das Laden der Seite abgebrochen. Dadurch kann der Angreifer erkennen, dass die erste Ziffer des Geheimnisses ist 5
. Der Angreifer errät dann weiterhin die nächste Ziffer.
Wenn Ihre Site voll von XSS-Reflexionsangriffen ist, 1
wird die Angriffsfläche durch Verwendung des Standardwerts von ein wenig reduziert. Wenn Ihre Site jedoch sicher ist und Sie nicht emittierenX-XSS-Protection: 0
, ist Ihre Site für jeden Browser anfällig, der diese Funktion unterstützt. Wenn Sie eine umfassende Unterstützung von Browsern gegen noch unbekannte XSS-Schwachstellen auf Ihrer Website wünschen, verwenden Sie einen strengen Content-Security-Policy
Header. Dadurch wird Ihre Website nicht für bekannte Sicherheitslücken geöffnet.
Derzeit ist diese Funktion in MSIE, Safari und Google Chrome standardmäßig aktiviert. Dies war früher in Edge aber aktiviert Microsoft hat diese Fehlfunktion bereits aus Edge entfernt . Mozilla Firefox hat dies nie implementiert.
Siehe auch:
https://homakov.blogspot.com/2013/02/hacking-facebook-with-oauth2-and-chrome.html
https://blog.innerht.ml/the-misunderstood-x-xss-protection/
http: / /p42.us/ie8xss/Abusing_IE8s_XSS_Filters.pdf
https://www.slideshare.net/masatokinugawa/xxn-de
https://bugs.chromium.org/p/chromium/issues/detail?id=396544
https: // bugs.chromium.org/p/chromium/issues/detail?id=498982