2012-06-25 82 views
50

我有一個重定向的頁面,當它不應該是,我試圖找出誰在做它。首先我試圖劫持window.location:當window.location更改時中斷?

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)); 

這在Chrome中完全不起作用。出於安全原因,您不能在window.location上執行setter和getter。好。我想接下來的事情是觀察onunload的和onbeforeunload:

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

我知道了window.location的值將保持不變,直到onunload事件後,又出於安全原因,但我希望一些其他線索;沒有這樣的運氣。我接下來嘗試在我可以在window.location可能分配的腳本中找到的每個點都放置斷點。根據Chrome調試器,它們都沒有被擊中。哎呀。順便說一句,這個重定向不會發生在FF中,我已經嘗試重新啓動Chrome。我覺得我已經真正嘗試了一切,無處可去,希望這意味着我即將升級爲開發人員?請?

對於我來說,操作調試器的人在任何瀏覽器中是否有任何方式突破重定向頁面位置的線?我知道允許自動訪問這些信息會產生安全隱患,但是沒有什麼能夠讓開發人員獲得特權,並且有辦法執行此操作?如果不是,處理這種情況的正常方法是什麼?這看起來很普遍,我不認爲任何人都喜歡在一個概念上簡單的問題上被封鎖幾個小時或幾天。 TIA

+2

最壞的情況下,你可以在某處放一個斷點,然後手動遍歷代碼,直到找到違規者 –

+1

爲真,這就是我現在正在做的事情,但作爲一個練習考慮重定向來自動態包括腳本標記: //重定向到google.com document.body.appendChild(document.createElement('script'))。 appendChild(document.createTextNode(decodeURIComponent(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'))) 這就是爲什麼我想知道是否有削減戈爾德結的技巧,或者如果不是,專業人士會如何最大限度地減少花費在這類問題上的時間。 –

+1

對此有何更新?我正在嘗試同樣的事情。 –

回答

15

網絡選項卡可以幫助您,打開保留日誌複選框,啓動器列將包含導致重定向的javascript位置。

+16

這將是有用的,除了在我的情況下,它只是說「其他」。 Chrome不太有用。 ':/' – qJake

相關問題