本來想要跳過這章直接進入正題,但如果寫那些攻擊原理的時候邊講HTTP的東西,感覺會有點混亂,於是就有了這篇的誕生。
HTTP 全稱 HyperText Transfer Protocol,是一個IPS(Inernet Protocol Suite)中應用層(Application layer)的一種協議。用作客戶端和伺服器端之間的Request和Response的標準。
另外需要知道的是HTTP URI Scheme,直接上範例比較容易理解:
http://example.com:80/index.php?id=1#section-1.1
http://<主機>:/<路徑>?<查詢(quary)>#<段落(fragment)>
<文字>
的方式跳轉到指定的文字段落:礙於篇幅 HTTP先介紹到這裡,有興趣可以看RFC文件
當你對網站發起一個Request時,會遵循格式發送
先看下面的例子,這是對google發起的request,每行結尾都有一組CRLF(\r\n)
GET / HTTP/1.1
Host: google.com
Sec-Ch-Ua: " Not A;Brand";v="99", "Chromium";v="92"
Sec-Ch-Ua-Mobile: ?0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
X-Client-Data: CKLbygE=
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate
Accept-Language: zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7
Connection: close
第1行是 request line,格式為:method target http-version
對應GET / HTTP/1.1
在RFC 7231、5789中定義了以下Method,除此之外也可以客製化Method。
從第2行開始是各式各樣的headers,又依據用途分為四種類型,在後面的攻擊會再詳細介紹:
下篇預告: HTTP Verb Tampering