軟件測試 | 使用WebScarab觀察實時的POST數(shù)據(jù)
問題
POST請求是用于提交復(fù)雜表單最常見的方法。不同于GET取值,我們無法僅通過查看網(wǎng)頁瀏覽器窗口頂部的URL來得知所有被傳遞的參數(shù)。參數(shù)經(jīng)由連接從我們的瀏覽器被傳送到服務(wù)器。所以,我們必須使用工具人來觀察輸入。
這項測試可以幫助你辨別輸入,包括隱藏域和由運行在網(wǎng)頁瀏覽器中的JavaScript計算得到的值。了解各種各樣的輸入類型(比如整數(shù),URL,HTML格式的文本)之后,你就能夠構(gòu)造合適的安全測試用例或誤用案例。
解決方案
POST數(shù)據(jù)可能很難懂,原因在于許多站點會在自己接收數(shù)據(jù)之后將你重定向到另一個頁面。POST數(shù)據(jù)可以很有用,當你按“后退”按鈕時,它阻止你兩次提交相同的表單。不過,這種重定向使我們很難直接在Firebug中抓取POST數(shù)據(jù),所以這里我們將嘗試另一件工具:WebScarab。
WebScarab需要你調(diào)整Firefox設(shè)置,如圖3-7所示。一旦將其配置好用于截獲數(shù)據(jù),它就可以用在本章所有的秘訣中。它的功能如此強大,我們強烈推薦你使用它。
要配置Firefox以便使用WebScarsb,請按以下步驟操作:
1.啟動WebScarab
2.從菜單欄中選擇“工具”→“選項”(Windows,Liunx),或者在Mac OS中按下(命令鍵+逗號)以激活Firedox首選項菜單如圖3-7所示。
3.選擇“高級”選項卡,然后選擇其中的“網(wǎng)絡(luò)”選項卡。
4.在這里,單擊“設(shè)置”,并手動設(shè)置到localhost的代理,端口是8008.
5.將這個代理服務(wù)器應(yīng)用到所有協(xié)議。

然后,可以按下步驟使用WebScarab來觀察POST數(shù)據(jù);
1.瀏覽到某個使用POST表單的頁面。你可以通過查看頁面源代碼并查找特定HTML標簽的方法來標識出別樣的表單。如果你找到<from>標簽,請查找method參數(shù)。如果顯示method=“post”,那么這就是使用POST數(shù)據(jù)的表單。
2.在表單中輸入一些簡單信息并提交。
3.切換到WebScarab,你應(yīng)該會看到若干個條目顯示這你最近的幾個頁面請求。
你可以在圖3-8中看到WebScarab所獲取的信息。
雙擊將方法(Method)設(shè)定為POST的任一請求。你將會看到這個頁面請求的所有細節(jié)。在請求頭下面,你會找到一段內(nèi)容,它包含所有的POST變量及其取值。
這些頭信息與請求頭遵循相同的格式,僅僅是“名稱一值”對,但它們是由服務(wù)器而不是瀏覽器來設(shè)置的。舉個例子,請看圖3-9的底部,那里顯示了URL編碼的POST數(shù)據(jù)。
討論
WebScarab是一件功能強大的工具。作為代理,它能夠揭示在你的瀏覽器和Web服務(wù)器之間所有可以被看到的內(nèi)容,這不同于Firebug,后者會在你每次單擊鏈接時重置。WebScarab會保持記錄,直到被關(guān)閉。你可以保存這種歷史,以便重新提交HTTP請求(修改其中的某些取值)。其實,使用WebScarab,你可以觀察并更改Web服務(wù)器發(fā)送給你的一切內(nèi)容。


圖3-9:WebScarab知道你在POST中隱藏的信息
這證明,POST數(shù)據(jù)雖然比查詢字符串或Cookie數(shù)據(jù)(這兩者都可以從請求頭中找到)要稍微難找些,但它的提取、更改和重新提交也不難完成。正如應(yīng)用永遠也不應(yīng)該相信查詢字符串中的數(shù)據(jù)那樣,同樣的道理也適用于POST數(shù)據(jù),甚至是隱藏表單域。
警告:
如果你試圖瀏覽器受SSL保護的頁面,WebScarab導致瀏覽器彈出各種各樣的警告。這些警告指出,你正在訪問的網(wǎng)站的加密簽名是不正確的。這是可以預(yù)見到的,因為WebScarab正在截獲請求。不要將這種警告(使用工具的結(jié)果)與你的網(wǎng)站上SSL或加密不工作的提示相混淆。如果你禁用了WebScarab之后確仍然看到SSL錯誤,那么你才應(yīng)該擔心。
同樣滴地,如果配置WebScarab用作代理,那么FTP請求將完全失效。
Firefox有個附加組件稱作SwitchProxy(https://addons.mozilla.org/en-US/firefox/addon/125),它允許你在使用WebScarab這樣的代理和使用另一個代理(比如,你公司的代理)或者完全不適用代理之間切換。如果你的正常環(huán)境需要你使用代理,那么SwitchProxy就特別方便,因為手動切換非常不方便。