2011-06-21 52 views
0

我正在構建我的第一個Firefox擴展,並且我碰到了一堵牆。我也不熟悉JavaScript,但我確實知道如何編程。構建一個通過腳本標記進行解析的Firefox擴展

該擴展嘗試通過運行分類器運行腳本標記中包含的所有代碼來識別惡意JavaScript代碼。我已經在Python中建立了分類器,但我無法弄清楚如何識別JavaScript並將其發送給分類器。什麼是最好的方法來捕獲腳本標記之間的所有內容,並將其發送給分類器。日誌說,我在數組中捕獲每個項目「var scripts = document.getElementsByTagName('script');」是xulelement對象的類型,但我不知道如何獲取實際的代碼。在for循環中,我想將數組中的每個項目發送給分類器。我已經包括了我有這麼遠低於:

function extractScripts(){ 
    var scripts = document.getElementsByTagName('script'); 
    scriptExtractor_Log(scripts.length + ' scripts were found'); 
    var sLen = scripts.length 
    for (var i=0, len=sLen; i<len; ++i){ 
     scriptExtractor_Log('script ' + i + ': ' + scripts[i]); 
    }    
    return 0; 
} 
+0

真的很難找到惡意代碼。 :P – bzlm

+1

你有很好的目標......你爲什麼不從一個Hello世界開始!教程? – CristiC

回答

1

提取腳本標籤不足以識別惡意腳本。考慮這個典型的XSS代碼,例如:

<img src="this_does_not_exist" onerror="alert('Doing something evil')"> 

如果您加載HTML網頁瀏覽器反正那麼你可以看看在JavaScript Deobfuscator extension。該擴展使用JavaScript調試器服務攔截正在編譯或執行的所有JavaScript代碼 - 即使它是動態生成的。您可以在https://developer.mozilla.org/en/Code_snippets/JavaScript_Debugger_Service上找到一些代碼示例,JavaScript Deobfuscator設置debuggerService.scriptHook來攔截正在編譯的腳本(將調用onScriptCreatedonScriptDestroyed)。

+0

謝謝你,這太棒了! – chrs

0

腳本是外部或內嵌所以你需要檢查每個標籤的src屬性。然後,您可以發出AJAX請求來獲取腳本的源代碼。但是,如果腳本是從另一個域(它經常是),你不能把它retreive由於cross-domain policy

for (var i=0, len=sLen; i<len; ++i){ 
    if (scripts[i].src) { //check if src is defined 
    var XHR = new XMLHttpRequest(); //create a new XHR object 
    XHR.open("GET",scripts[i].src,false); // the false here makes your request synchronus 
    XHR.send(); //send the request 
    scripttxt = XHR.respose; 
    } else { 
    scripttxt = scripts[i].innerHTML; 
    } 
    scriptExtractor_Log('script ' + i + ': ' + scripttxt); 

} 

如果您使用python已經它可能只是更容易使用Python庫來解析HTML和拉出標籤主體

+0

腳本是外部或內聯,或其他東西,或動態加載,或... – bzlm