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