- Web漏洞搜索
- (美)彼得·亞沃斯基
- 1628字
- 2021-11-05 10:19:58
1.4 HTTP請(qǐng)求
客戶端和服務(wù)器端之間關(guān)于“如何處理HTTP消息”的協(xié)議包括定義請(qǐng)求方法。請(qǐng)求方法指示了客戶端請(qǐng)求的目的及客戶端期望的成功結(jié)果。例如,在列表1-1中,我們向http://www.google.com/發(fā)送GET請(qǐng)求,暗示我們只期待返回http://www.google.com/網(wǎng)頁的內(nèi)容,無須執(zhí)行其他操作。開發(fā)和實(shí)現(xiàn)請(qǐng)求方法是為了區(qū)分被調(diào)用的操作,因?yàn)榛ヂ?lián)網(wǎng)被設(shè)計(jì)成遠(yuǎn)程計(jì)算機(jī)之間的接口。
HTTP標(biāo)準(zhǔn)定義了以下請(qǐng)求方法:GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT和OPTIONS(PATCH在HTTP RFC中也有提到,但并不常用)。在撰寫本書時(shí),瀏覽器只會(huì)使用HTML發(fā)送GET和POST請(qǐng)求。任何PUT、PATCH或DELETE請(qǐng)求都是JavaScript調(diào)用HTTP請(qǐng)求的結(jié)果。在本書后面,當(dāng)考慮應(yīng)用程序中的漏洞示例時(shí),應(yīng)想到這些方法。
下面將簡要介紹請(qǐng)求方法。
1.請(qǐng)求方法
GET方法通過請(qǐng)求統(tǒng)一資源標(biāo)識(shí)符(URI)標(biāo)識(shí)信息。URI通常與統(tǒng)一資源定位器(URL)一起使用。嚴(yán)格地說,URL是一種定義資源的URI類型,它包括通過網(wǎng)絡(luò)位置來定位該資源的方法。例如,http://www.google.com/<example>/file.txt和/<example>/file.txt都是有效的URI,但是只有http://www.google.com/<example>/file.txt是有效的URL,因?yàn)樗鼧?biāo)識(shí)了如何通過域名http://www.google.com定位資源。盡管有細(xì)微差別,但整本書中在引用任何資源標(biāo)識(shí)符時(shí)都使用URL。
雖然無法強(qiáng)制執(zhí)行此要求,但GET請(qǐng)求不會(huì)更改數(shù)據(jù),而只從服務(wù)器端檢索數(shù)據(jù)并在HTTP消息體中返回內(nèi)容。例如,在一個(gè)社交媒體網(wǎng)站上,GET請(qǐng)求只會(huì)返回你的配置文件名,卻不會(huì)更新你的配置文件。這種行為對(duì)于第4章中討論的跨站點(diǎn)請(qǐng)求偽造(CSRF)漏洞至關(guān)重要。訪問任何URL或網(wǎng)站鏈接(除非由JavaScript調(diào)用),瀏覽器都會(huì)向目標(biāo)服務(wù)器發(fā)送GET請(qǐng)求。這種特性對(duì)于第2章中討論的開放重定向漏洞至關(guān)重要。
HEAD方法與GET方法相同,只是服務(wù)器不能在響應(yīng)中返回消息體。
POST方法由服務(wù)器決定調(diào)用接收服務(wù)器上的某些函數(shù)。換句話說,其通常會(huì)執(zhí)行某種類型的后端操作,例如創(chuàng)建評(píng)論、注冊(cè)用戶、刪除賬戶等。服務(wù)器響應(yīng)POST所執(zhí)行的操作可能會(huì)有所不同。服務(wù)器有時(shí)可能根本不會(huì)返回響應(yīng)。例如,POST請(qǐng)求可能會(huì)導(dǎo)致處理請(qǐng)求時(shí)發(fā)生錯(cuò)誤,并且不會(huì)在服務(wù)器上保存記錄。
PUT方法調(diào)用一些引用遠(yuǎn)程網(wǎng)站或應(yīng)用程序上已存在的記錄的函數(shù)。例如,在更新已存在的賬戶、博客文章或其他內(nèi)容時(shí)可能會(huì)使用它。同樣,執(zhí)行的操作可能會(huì)有所不同,并可能導(dǎo)致服務(wù)器根本不執(zhí)行任何操作。
DELETE方法請(qǐng)求遠(yuǎn)程服務(wù)器刪除用URI標(biāo)識(shí)的遠(yuǎn)程資源。
TRACE方法是另一種不常見的方法,用于將請(qǐng)求消息返回給請(qǐng)求者。它允許請(qǐng)求者查看服務(wù)器接收到的內(nèi)容,并使用這些信息來測(cè)試和收集診斷信息。
被保留的CONNECT方法用于代理服務(wù)器。代理服務(wù)器可將請(qǐng)求轉(zhuǎn)發(fā)到其他服務(wù)器。此方法可以啟動(dòng)與所請(qǐng)求資源的雙向通信。例如,CONNECT方法可以通過代理訪問HTTPS的網(wǎng)站。
OPTIONS方法從服務(wù)器請(qǐng)求有關(guān)可用通信選項(xiàng)的信息。例如,通過調(diào)用OPTIONS可以確定服務(wù)器是否接受GET、POST、PUT、DELETE和OPTIONS調(diào)用。此方法不會(huì)指示服務(wù)器是否接受HEAD或TRACE調(diào)用。瀏覽器會(huì)自動(dòng)為特定的內(nèi)容類型(如application/json)發(fā)送這種類型的請(qǐng)求。這種方法稱為“飛行前的OPTIONS調(diào)用”(preflight OPTIONS call),我們將在第4章中更深入地討論這種方法,因?yàn)樗鸬搅薈SRF漏洞保護(hù)的作用。
2.HTTP是無狀態(tài)的
HTTP請(qǐng)求是無狀態(tài)的,這意味著發(fā)送到服務(wù)器的每個(gè)請(qǐng)求都被視為一個(gè)全新的請(qǐng)求。服務(wù)器在接收請(qǐng)求時(shí)并不知道它以前與瀏覽器的通信。這對(duì)大多數(shù)網(wǎng)站來說都是一個(gè)問題,因?yàn)榫W(wǎng)站要記住你是誰。否則,每次發(fā)送HTTP請(qǐng)求時(shí)你都必須重新輸入用戶名和密碼。這也意味著處理HTTP請(qǐng)求所需的所有數(shù)據(jù)都必須與客戶端發(fā)送到服務(wù)器的每個(gè)請(qǐng)求一起重新加載。
為了解釋這個(gè)令人困惑的內(nèi)容,思考一下這樣一個(gè)例子:如果你我之間有一個(gè)無狀態(tài)的對(duì)話,在講每一句話之前,我必須從“我是彼得·亞沃斯基,剛才討論的是黑客攻擊”開始。然后你必須重新載入我們討論的關(guān)于黑客攻擊的所有信息。想想在電影《初戀50次》中Henry Roth每天早上都為Lucy Whitmore做些什么(如果你沒看過這部電影,你應(yīng)該去看一看)。
為了避免每次發(fā)送HTTP請(qǐng)求時(shí)都必須重新發(fā)送用戶名和密碼,網(wǎng)站使用了cookie或基本身份驗(yàn)證,我們將在第4章詳細(xì)討論。
注意:使用base64對(duì)內(nèi)容進(jìn)行編碼的細(xì)節(jié)超出了本書的范圍,但在滲透時(shí),你可能會(huì)遇到base64編碼的內(nèi)容。如果是這樣,你應(yīng)該解碼該內(nèi)容。搜索“base64解碼”,你會(huì)找到大量的工具和方法來實(shí)現(xiàn)這一點(diǎn)。
- unidbg逆向工程:原理與實(shí)踐
- Securing Blockchain Networks like Ethereum and Hyperledger Fabric
- Mobile Forensics Cookbook
- 計(jì)算機(jī)使用安全與防護(hù)
- 黑客攻防入門秘笈
- 數(shù)字安全藍(lán)皮書:本質(zhì)屬性與重要特征
- Web安全與攻防入門很輕松(實(shí)戰(zhàn)超值版)
- 黑客攻防與無線安全從新手到高手(超值版)
- 學(xué)電腦安全與病毒防范
- 網(wǎng)絡(luò)安全設(shè)計(jì)、配置與管理大全
- 網(wǎng)絡(luò)安全應(yīng)急響應(yīng)實(shí)戰(zhàn)
- 黑客攻防從入門到精通
- 網(wǎng)絡(luò)空間安全:拒絕服務(wù)攻擊檢測(cè)與防御
- 華為Anti-DDoS技術(shù)漫談
- 網(wǎng)絡(luò)空間安全法律問題研究