2012-06-25 6 views
50

Ich habe eine Seite, die umleitet, wenn es nicht sein sollte, und ich versuche herauszufinden, wer es macht. Zuerst versuchte ich Hijacking window.location:Brechen, wenn window.location sich ändert?

window.location = (function (location) { 
    // location is now hidden inside a closure. We can override it 
    var Location = Object.create(location); 
    // Location is now our proxy. We can use it to catch changes 
    window.__defineGetter__('location', function() { return Location }); 
    window.__defineSetter__('location', function (x) { debugger; location = x; return x; }); 
    // etc etc, considered assignments to location.href, location.search, location.host etc., as well as calls to location.replace and location.assign 
}(window.location)); 

Das hat überhaupt nicht in Chrome funktioniert. Sie können aus Sicherheitsgründen keine Setter und Getter auf window.location ausführen. OK. Das nächste, was ich versuchte, beobachtet onunload und onbeforeunload:

['unload', 'beforeunload'].forEach(function (evName) { 
    window.addEventListener(evName, function() { 
     debugger; // Chance to check everything right before the redirect occurs 
    }); 
}); 

Ich wusste, dass der Wert von window.location gleich bis nach dem onunload Ereignisse bleiben würde, wieder aus Sicherheitsgründen, aber ich habe gehofft, für einige andere Ahnung ; kein solches Glück. Als nächstes habe ich versucht, Breakpoints an jedem Punkt zu setzen, den ich in meinen eigenen Skripten finden kann, wo window.location möglicherweise zugewiesen werden kann. Keiner von ihnen wird entsprechend dem Chrome-Debugger getroffen. Argh. Diese Umleitung geschieht übrigens nicht in FF, und ich habe bereits versucht, Chrome neu zu starten. Ich habe das Gefühl, dass ich wirklich alles versucht habe und nirgendwohin gekommen bin, was hoffentlich bedeutet, dass ich als Entwickler aufsteigen werde? Bitte?

Gibt es einen Weg in irgendeinem Browser für mich, den Menschen, der den Debugger betreibt, um die Leitung zu unterbrechen, die den Seitenstandort umleitet? Ich verstehe, dass es Auswirkungen auf die Sicherheit gibt, den automatischen Zugriff auf diese Informationen zuzulassen, aber gibt es nichts, was den Entwickler privilegiert und einen Weg dazu bietet? Wenn nicht, was ist der normale Umgang mit einer solchen Situation? Es scheint üblich genug zu sein und ich glaube nicht, dass jemand gerne stundenlang an einem konzeptionell einfachen Problem blockiert. TIA

+2

schlimmstenfalls könnten Sie einfach einen Haltepunkt irgendwo setzen und dann manuell den Code durchlaufen, bis Sie den Täter finden –

+1

Wahr, und das ist, was ich gerade mache, aber als eine Übung betrachten Sie den Fall, wo die Umleitung von einem dynamisch kommt enthaltenes Skript-Tag: // Leitet auf google.com um document.body.appendChild (document.createElement ('script')). appendChild (document.createTextNode (decodeURIComponent) ( '% 77% 69% 6e% 64% 6f% 77% 2e% 6c% 6f% 63% 61% 74% 69% 6f% 6e% 2e% 61% 73% 73% 69% 67% 6e% 28% 27% 68 \ % 74% 74% 70% 3a% 2f% 2f% 77% 77% 77% 2e% 67% 6f% 6f% 67% 6c% 65% 2e% 63% 6f% 6d% 27% 29 '))) Deshalb frage ich mich, ob es einen Trick gibt, um den Gordian-Knoten zu schneiden, oder wenn nicht, was die Profis tun, um die Zeit für solche Probleme zu minimieren. –

+1

Irgendwelche Updates zu diesem Thema? Ich versuche das Gleiche. –

Antwort

15

Die Registerkarte "Netzwerk" hilft Ihnen beim Aktivieren des Kontrollkästchens "Protokoll aufbewahren", die Spalte "Initiator" enthält den JavaScript-Speicherort, der die Weiterleitung verursacht hat.

+16

Dies wäre nützlich, außer in meinem Fall sagt es nur "Andere". Nicht sehr hilfreich, Chrome. ': /' – qJake