圖1 瀏覽器擴展Firebug
二、利用Firebug控制臺劫持函數(shù)
Firebug控制臺可以用來計算表達(dá)式。作用如同命令行JavaScript解釋器。在控制臺中,我們不僅可以輸入JavaScript表達(dá)式(例如,Alert (‘Message’);),而且還能接收錯誤消息。如下圖所示:
圖2 Firebug控制臺
您也可以動態(tài)插入代碼,舉例來說,如果要測試一個Web 應(yīng)用程序,該程序有一個從窗口對象導(dǎo)出的方法,稱為performRequest。應(yīng)用程序使用該方法從客戶端發(fā)送請求到服務(wù)器。我們更感興趣的可能是這個函數(shù)請求的信息,所以我們將在控制臺中提供下列命令來劫持該方法:
|
上述代碼實際上將用我們自己的函數(shù)替換原先的performRequest函數(shù),我們的函數(shù)執(zhí)行時將在控制臺中列出所有參數(shù)。當(dāng)函數(shù)調(diào)用結(jié)束時,我們將代碼流程重定向到oldPerformRequest定義的原先的performRequest上,它將執(zhí)行要求的操作?,F(xiàn)在,我們已經(jīng)明白如何在無需改寫Web 應(yīng)用程序的方法的情況下來劫持函數(shù)。
二、利用Firebug瀏覽和動態(tài)修改HTML元素
許多Web開發(fā)人員和設(shè)計者經(jīng)常忽視HTML 源代碼的可讀性,尤其是用所見即所得的編輯器產(chǎn)生的頁面。這會加劇我們審查其源代碼的難度,這時,我們就需要使用其他一些工具來重新組織頁面的各個部分。當(dāng)然,我們可以使用DOM Inspector來探索這些結(jié)構(gòu)欠佳的HTML 源代碼,而Firebug也能達(dá)到同樣的目的,下面是Firebug的HTML視圖。
圖3 Firebug的HTML視圖
如圖3所見,可以選擇并展開當(dāng)前視圖中的每個HTML 元素。當(dāng)鼠標(biāo)停在某個元素上的時候,瀏覽器就會高亮顯示對應(yīng)元素。在右邊的窗口,顯示了關(guān)于式樣、布局和DOM 特性的信息。DOM信息極為有用,當(dāng)您想查詢各種不同類型的屬性可用時,幾乎與DOM Inspector一樣。此外,我們也可以用它探索應(yīng)用程序運行機制。舉例來說,AJAX應(yīng)用開發(fā)人員經(jīng)常會為圖像、鏈接及其他類型的html 元素添加附加的屬性,而這些屬性和方法可能是應(yīng)用程序邏輯的關(guān)鍵部分。
HTML視圖還能用于動態(tài)地修改應(yīng)用程序文檔的結(jié)構(gòu)。我們可以通過按下鍵盤上的刪除鍵來刪除所選定的元素,或者修改各個元素的屬性,方法是在元素屬性上雙擊并設(shè)置它的值。注意,HTML 結(jié)構(gòu)的改變可能對頁面更新事件不起作用。如果希望變化固定下來,可以使用GreaseMonkey腳本。
三、利用Firebug調(diào)試JavaScript腳本
Ajax 應(yīng)用程序通常涉及JavaScript、XML和按需信息檢索。它們的規(guī)模常常超過正常應(yīng)用程序,并且運行起來很像是桌面應(yīng)用程序。因為大量使用JavaScript,所以您將發(fā)現(xiàn)標(biāo)準(zhǔn)漏洞估計程序?qū)o法覆蓋所有可能的攻擊方式。就像二進(jìn)制程序測試一樣,我們需要使用調(diào)試器來跟蹤代碼、分析程序結(jié)構(gòu)和調(diào)查潛在的問題,F(xiàn)irebug為我們提供了所有這些功能,下圖向我們展示了Firebug腳本調(diào)試器視圖。
圖4 Firebug腳本調(diào)試視圖
在圖4中我們可以看到一個斷點,其位于第2行。 斷點是些偽指令,用來通知JavaScript解釋器當(dāng)代碼抵達(dá)這些斷點時停止/中止該進(jìn)程。一旦程序暫停,我們就可以查看存放在全局、局部變量中的當(dāng)前數(shù)據(jù),甚至更新它們。我們不僅可以通過它來了解程序正在干什么,并且還能取得對應(yīng)用程序的完全控制。
在圖4的右邊,您可以看到監(jiān)視和斷點列表。斷點列表包含我們在當(dāng)前調(diào)試的代碼中設(shè)置的全部斷點。您可以迅速禁用和啟用斷點,但是卻無需知道斷點的精確位置。
監(jiān)控列表提供了一個機制來監(jiān)視DOM結(jié)構(gòu)中的變化。舉例來說,如果想知道某個的值在程序運行過程中的變化情況,只須簡單創(chuàng)建一個相應(yīng)的的監(jiān)控條目即可。