官术网_书友最值得收藏!

  • 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)。

主站蜘蛛池模板: 阿坝县| 青神县| 昭苏县| 深圳市| 珲春市| 荣成市| 晴隆县| 花莲市| 响水县| 夏邑县| 宜春市| 滦南县| 同江市| 霍山县| 洪江市| 开封市| 黑河市| 玛曲县| 合阳县| 平利县| 罗平县| 高州市| 合江县| 宜章县| 宜丰县| 芮城县| 兰考县| 迁西县| 南召县| 平定县| 吉木萨尔县| 志丹县| 天柱县| 井陉县| 夹江县| 海伦市| 亳州市| 抚州市| 松滋市| 宝鸡市| 辽中县|