ich eine Login-Seite haben https://example.com/login#destination
wo destination
die Ziel-URL ist der Benutzer versuchte, zu navigieren, wenn sie erforderlich waren eingeloggt sein.
(dh https://example.com/destination
)URL ist relativ, bevor sie über JavaScripts location.replace Navigation()
die JavaScript ich dachte über die Verwendung war
function onSuccessfulLogin() {
location.replace(location.hash.substring(1) || 'default')
}
Dies in einer XSS-Schwachstelle führen würde, von einem Angreifer die Bereitstellung der Verbindung
https://example.com/login#javascript:..
Auch ich muss nach der Anmeldung die Navigation zu einer Lookalike-Site verhindern.
https://example.com/login#https://looks-like-example.com
oderhttps://example.com/login#//looks-like-example.com
Wie kann ich einstellen onSuccessfulLogin
die URL in dem Hash-#
Abschnitt vorgesehen, um sicherzustellen, ist eine relative URL, und nicht an dem Start mit javascript:
, https:
, //
oder anderem absoluten Navigationsschema?
Ein Gedanke ist es, die URL zu bewerten und festzustellen, ob location.origin
vor der Navigation unverändert bleibt. Können Sie vorschlagen, wie Sie dies tun, oder einen besseren Ansatz?
erster Gedanke, der mir einfällt, ist eine Ajax HEAD Anfrage ... dann im Erfolg umleiten – charlietfl
Es gibt nicht genug Daten, um eine vollständige Lösung zu erarbeiten, aber um die Dinge ein bisschen einfacher und mehr coder freundlich zu machen, könnte ich leih dir meinen JavaScript Location Konstruktor, der auf folgende Weise benutzt werden kann. 'var loc = neue Lok (sURL); loc = loc.hash.split ("#") [1]; if (/javascript|http/i.test (loc.protocol)) {loc.hash = Standard; location = loc.href}; aber ich brauche noch eine bessere Klärung der Situation. –
@GeorgeBailey, natürlich ist es nicht - aber wenn Sie es nicht gut gelesen haben: Ich meine ursprüngliche Antwort Ich sage, "dass ich Ihnen meins leihen könnte" falls Sie meinen Vorschlag mögen. –