HTTP協議分析及攻防方法

weixin_30639719發表於2020-04-05

HTTP協議簡介

 

應用層協議,無狀態協議(可設定為維持TCP連線,但伺服器端的資源會釋放)。預設HTTP的埠號為80,HTTPS的埠號為443。

基於HTTP協議的客戶機訪問包括4個過程,分別是建立TCP套接字連線、傳送HTTP請求報文、接收HTTP應答報文和關閉TCP套接字連線。

請求報文格式:請求行、請求頭部和請求資料。

應答報文格式:狀態行、響應報頭、響應正文

HTTP請求方法

HTTP/1.1協議中共定義了八種方法來表明Request-URI指定的資源的不同操作方式,方法名稱是區分大小寫的:

HEAD 向伺服器索要與GET請求相一致的響應,只不過響應體將不會被返回。這一方法可以在不必傳輸整個響應內容的情況下,就可以獲取包含在響應訊息頭中的元資訊。 

GET 向特定的資源發出請求。注意:GET方法不應當被用於產生“副作用”的操作中,例如在web app.中。其中一個原因是GET可能會被網路蜘蛛等隨意訪問。 

GET請求報文示例:

GET http://www.baidu.com:80/ HTTP/1.1

Accept: */*

Accept-Language: zh-cn

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0;

Windows NT 5.1; SV1; .NET CLR 2.0.50727)

Host: www.baidu.com

Connection: Keep-Alive

GET應答報文示例:

HTTP/1.1 200 OK                                                              /* 狀態行 */

Via: 1.1 CVICSE-ST5YDEOY                                           /* 狀態頭資訊 */

Connection: Keep-Alive

Proxy-Connection: Keep-Alive

Content-length: 9803

Expires: Fri, 02 Nov 2012 03:05:31 GMT

後邊是頁面內容等                                              

POST 向指定資源提交資料進行處理請求(例如提交表單或者上傳檔案)。資料被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。 

POST請求報文示例:

POST /sp.cgi HTTP/1.0        

Host: www.spserver.com        

Content-Length: <Content-Length>

<CommandId>=<4>          

<SequenceNumber>=<205502327125025327>

<UserNumber>=<8613001125453>

<SPNumber>=<168>

<MessageContent>=<ABCD 1234>

POST應答報文示例:

HTTP/1.0 200 OK                                                /* 狀態行 */

Date: Tue, 13 Mar 2001 02:45:12 GMT                   /* 狀態頭資訊 */

Server: Apache/1.3.12 (Unix)

Content-Type: text/html

Connection: close

後邊是POST實體資訊                                                 /* 一般為POST實際傳輸的資訊*/

OPTIONS 返回伺服器針對特定資源所支援的HTTP請求方法。也可以利用向Web伺服器傳送'*'的請求來測試伺服器的功能性。 

PUT 向指定資源位置上傳其最新內容。 

DELETE 請求伺服器刪除Request-URI所標識的資源。 

TRACE 回顯伺服器收到的請求,主要用於測試或診斷。 

CONNECT HTTP/1.1協議中預留給能夠將連線改為管道方式的代理伺服器。 

HTTP協議欄位

Requests獨有部分:

Header

解釋

示例

Accept

指定客戶端能夠接收的內容型別

Accept: text/plain, text/html

Accept-Charset

瀏覽器可以接受的字元編碼集

Accept-Charset: iso-8859-5

Accept-Encoding

指定瀏覽器可以支援的web伺服器返回內容壓縮編碼型別

Accept-Encoding: compress, gzip

Accept-Language

瀏覽器可接受的語言

Accept-Language: en,zh

Accept-Ranges

可以請求網頁實體的一個或者多個子範圍欄位

Accept-Ranges: bytes

Authorization

HTTP授權的授權證書,當使用密碼機制時用來標識瀏覽器

Authorization:Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Cookie

Cookie是在瀏覽器中寄存的小型資料體,它可以記載和伺服器相關的使用者資訊,也可以用來實現會話功能

JSESSIONID=DFB91E6D3B78AFD0270FDA90DA7062E1.isp5; CASSERVERPATH=http://192.168.2.19:8580

Content-Length

請求的內容長度

Content-Length: 348

Content-Type

請求的與實體對應的MIME資訊

Content-Type: application/x-www-form-urlencoded

Expect

客戶預期的響應狀態

Expect: 100-continue

From

發出請求的使用者的Email

From: user@email.com

Host

指定請求的伺服器的域名和埠號

Host: www.zcmhi.com

If-Match

只有請求內容與實體相匹配才有效,供PUT方法使用

If-Match: “737060cd8c284d8af7ad3082f209582d”

If-Modified-Since

如果請求的部分在指定時間之後被修改則請求成功,未被修改則返回304程式碼

If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT

If-None-Match

如果內容未改變返回304程式碼,引數為伺服器先前傳送的Etag,與伺服器回應的Etag比較判斷是否改變

If-None-Match: “737060cd8c284d8af7ad3082f209582d”

If-Range

如果實體未改變,伺服器傳送客戶端丟失的部分,否則傳送整個實體。引數也為Etag

If-Range: “737060cd8c284d8af7ad3082f209582d”

If-Unmodified-Since

只在實體在指定時間之後未被修改才請求成功

If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT

Max-Forwards

限制資訊通過代理和閘道器傳送的時間

Max-Forwards: 10

Proxy-Authorization

連線到代理的授權證書

Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Range

只請求實體的一部分,指定範圍

Range: bytes=500-999

Referer

先前網頁的地址,當前請求網頁緊隨其後,即來路

Referer: http://www.zcmhi.com/archives/71.html

TE

客戶端願意接受的傳輸編碼,並通知伺服器接受接受尾加頭資訊

TE: trailers,deflate;q=0.5

User-Agent

User-Agent的內容包含發出請求的使用者資訊

User-Agent: Mozilla/5.0 (Linux; X11)

 

Responses 獨有部分 

Header

解釋

示例

Accept-Ranges

表明伺服器是否支援指定範圍請求及哪種型別的分段請求

Accept-Ranges: bytes

Age

從原始伺服器到代理快取形成的估算時間(以秒計,非負)

Age: 12

Allow

對某網路資源的有效的請求行為,不允許則返回405

Allow: GET, HEAD

Content-Encoding

web伺服器支援的返回內容壓縮編碼型別。

Content-Encoding: gzip

Content-Language

響應體的語言

Content-Language: en,zh

Content-Length

響應體的長度

Content-Length: 348

Content-Location

請求資源可替代的備用的另一地址

Content-Location: /index.htm

Content-MD5

返回資源的MD5校驗值

Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==

Content-Range

在整個返回體中本部分的位元組位置

Content-Range: bytes 21010-47021/47022

Content-Type

返回內容的MIME型別

Content-Type: text/html; charset=utf-8

ETag

請求變數的實體標籤的當前值

ETag: “737060cd8c284d8af7ad3082f209582d”

Expires

響應過期的日期和時間

Expires: Thu, 01 Dec 2010 16:00:00 GMT

Last-Modified

請求資源的最後修改時間

Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT

Location

用來重定向接收方到非請求URL的位置來完成請求或標識新的資源

Location: http://www.zcmhi.com/archives/94.html

Proxy-Authenticate

它指出認證方案和可應用到代理的該URL上的引數

Proxy-Authenticate: Basic

refresh

應用於重定向或一個新的資源被創造,在5秒之後重定向(由網景提出,被大部分瀏覽器支援)

Refresh: 5; url=

http://www.zcmhi.com/archives/94.html

Retry-After

如果實體暫時不可取,通知客戶端在指定時間之後再次嘗試

Retry-After: 120

Server

web伺服器軟體名稱

Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)

Set-Cookie

設定Http Cookie

Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1

Vary

告訴下游代理是使用快取響應還是從原始伺服器請求

Vary: *

WWW-Authenticate

表明客戶端請求實體應該使用的授權方案

WWW-Authenticate: Basic

 

Requests/ Responses共有部分

Header

解釋

示例

Cache-Control

指定請求和響應遵循的快取機制

Cache-Control: no-cache

Connection

表示是否需要持久連線。(HTTP 1.1預設進行持久連線)

Connection: close

Date

瀏覽器或者伺服器訊息發出的時間

Date: Tue, 15 Nov 2010 08:12:31 GMT

Pragma

包括實現特定的指令,它可應用到響應鏈上的任何接收方

Pragma: no-cache

Trailer

指出頭域在分塊傳輸編碼的尾部存在

Trailer: Max-Forwards

Transfer-Encoding

檔案傳輸編碼

Transfer-Encoding:chunked

Upgrade

向伺服器指定某種傳輸協議以便伺服器進行轉換(如果支援)

Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11

Via

通知中間閘道器或代理伺服器地址,通訊協議

Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)

Warning

警告實體可能存在的問題

Warning: 199 Miscellaneous warning

       

HTTP返回狀態碼

1xx:請求收到,繼續處理

2xx:操作成功收到,分析、接受

3xx:完成此請求必須進一步處理

4xx:請求包含一個錯誤語法或不能完成

5xx:伺服器執行一個完全有效請求失敗

100——客戶必須繼續發出請求

101——客戶要求伺服器根據請求轉換HTTP協議版本

200——交易成功

201——提示知道新檔案的URL

202——接受和處理、但處理未完成

203——返回資訊不確定或不完整

204——請求收到,但返回資訊為空

205——伺服器完成了請求,使用者代理必須復位當前已經瀏覽過的檔案

206——伺服器已經完成了部分使用者的GET請求

300——請求的資源可在多處得到

301——刪除請求資料

302——在其他地址發現了請求資料

303——建議客戶訪問其他URL或訪問方式

304——客戶端已經執行了GET,但檔案未變化

305——請求的資源必須從伺服器指定的地址得到

306——前一版本HTTP中使用的程式碼,現行版本中不再使用

307——申明請求的資源臨時性刪除

400——錯誤請求,如語法錯誤

401——請求授權失敗

402——保留有效ChargeTo頭響應

403——請求不允許

404——沒有發現檔案、查詢或URl

405——使用者在Request-Line欄位定義的方法不允許

406——根據使用者傳送的Accept拖,請求資源不可訪問

407——類似401,使用者必須首先在代理伺服器上得到授權

408——客戶端沒有在使用者指定的餓時間內完成請求

409——對當前資源狀態,請求不能完成

410——伺服器上不再有此資源且無進一步的參考地址

411——伺服器拒絕使用者定義的Content-Length屬性請求

412——一個或多個請求頭欄位在當前請求中錯誤

413——請求的資源大於伺服器允許的大小

414——請求的資源URL長於伺服器允許的長度

415——請求資源不支援請求專案格式

416——請求中包含Range請求頭欄位,在當前請求資源範圍內沒有range指示值,請求

也不包含If-Range請求頭欄位

417——伺服器不滿足請求Expect頭欄位指定的期望值,如果是代理伺服器,可能是下

一級伺服器不能滿足請求

500——伺服器產生內部錯誤

501——伺服器不支援請求的函式

502——伺服器暫時不可用,有時是為了防止發生系統過載

503——伺服器過載或暫停維修

504——關口過載,伺服器使用另一個關口或服務來響應使用者,等待時間設定值較長

505——伺服器不支援或拒絕支請求頭中指定的HTTP版本

常見攻擊和防禦手段,未整理完的

  1. SQL隱碼攻擊
  2. 跨站指令碼攻擊(XSS)
  3. 跨站請求偽造攻擊(CSRF)
  4. Http Heads攻擊
  5. DOS/DDOS

HTTP是基於傳輸層TCP協議的,而TCP是一個端到端的面向連線的協議

  1. 會話劫持
  2. HTTP身份驗證
  3. 每個欄位都可被用來攻擊,可以對欄位進行分安全級別,由使用者來選擇安全級別,高安全級別檢驗更多欄位。欄位內容,欄位長度

可以把http的攻擊按照不同階段進行羅列

轉載於:https://www.cnblogs.com/xiachj/p/4112134.html

相關文章