web安全(一)http協議

2.1http協議解析

? ? ? ?HTTP:超文本傳輸協議,是一種規(guī)范了瀏覽器與服務器之間互相通信的規(guī)則。

2.1.1發(fā)起http請求

? ? ? ?瀏覽器地址欄輸入一個URL就發(fā)起了http請求。URL(統(tǒng)一資源定位符)即網頁地址。
URL的標準如下:

協議://服務器IP[:端口]/路徑/[?查詢]

在某些方面而言,瀏覽器在http協議方面只不過多了HTML渲染的功能,讓用戶看到更直觀的界面。

2.1.2HTTP協議詳解

? ? ? ?HTTP是一種無狀態(tài)的協議。無狀態(tài)是指web瀏覽器與web服務器之間不需要建立持久的鏈接,這意味著當一個客戶端向服務器端發(fā)出請求,然后web服務器返回響應(Response),連接就被關閉了。在服務器端不保留連接有關信息。HTTP請求只能由客戶端發(fā)起,而服務器不能主動向客戶端發(fā)送數據。
? ? ? ?HTTP遵循請求(Request)/應答(Response)模型。


image.png

通過實例來學習HTTP請求與響應

1.HTTP請求與響應。

(1)HTTP請求
? ? ? ?HTTP請求包括三部分,分別是請求行(請求方法),請求頭(消息報頭)和請求正文。

POST /login.php HTTP/1.1                                      //請求行
Host: www.xxser.com                                         //請求頭
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 
                                                    //空白行,表示請求頭結束
Username=admin&password=admin                   //請求正文

? ? ? ?請求行由三部分組成,第一部分說明是POST請求。第二部分/login.php 說明是該域名根目錄下的login.php。第三部分使用的是HTTP1.1版本。
? ? ? ?第二行至空白行為HTTP中的請求頭(消息頭)。其中Host代表請求的主機地址,User-Agent代表瀏覽器的標識。

(2)HTTP響應
? ? ? ?HTTP響應也由三部分內容組成。分別是響應行,響應頭(消息報頭)和響應正文(消息主題)。

HTTP/1.1 200 OK                                           //響應行
Date: Sun, 28 Jan 2018 09:55:48 GMT         //響應頭
Server: BWS/1.0
Content-Length: 97
Content-Type: text/html; charset=utf-8
Cache-Control: private
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Content-Encoding:gzip
Set-Cookie: _m7e_session=a797ede0c2a3193d03c77d875e462e3f; path=/; expires=Sun, 28 Jan 2018 15:55:48 -0000; HttpOnly
Connection: Keep-Alive
//空白行代表響應頭結束
<html>                                              //響應主題又叫消息主題
<head><title>··················

? ? ? ?HTTP響應的第一行為響應行,其中有HTTP版本,狀態(tài)嗎(200)以及消息ok。
? ? ? ?第二行至末尾的空白為響應頭,由服務器向客戶端發(fā)送。
? ? ? ?消息報頭之后是響應正文,是服務器端向客戶端發(fā)送的HTML數據。

2.HTTP請求方法

? ? ? ?HTTP請求的方法非常多,以GEt,POST最常見。
(1)GET
? ? ? ?GET方法用戶獲取請求頁面的指定信息(以實體的格式)。如果請求資源為動態(tài)腳本(非HTML),那么返回文本是web容器解析后的HTML源代碼,而不是源文件。例如請求index.jsp,返回的不是index.jsp的源文件,而是解析后的html代碼。

GET /index.php?id=1  HTTP/1.1
HOST: www.xxser.com

? ? ? ?使用GET請求index.php,并且id參數為1,在服務器端監(jiān)本語言中可以選擇性地接手這些參數,比如id=1&name=admin,一般都是由開發(fā)者內定好的參數項目才會接收,比如開發(fā)者只接收id參數項目,若加了其他參數項,如:

index.php?id=1&username=admin    //多個參數以“&”分隔

服務器端腳本不會理會你加入的內容,依然只會接收id參數,并且去查詢數據,最終向服務器端發(fā)送解析過的HTML數據,不會因為你的干擾而亂套。
(2)POST
? ? ? ?post方法與GET類似,但最大的區(qū)別在于,GET方法沒有請求內容,而POST是有請求內容的。POSt請求最多用于向服務器發(fā)送大量數據。GET有大小(長度)限制,并且GET請求會將發(fā)送的數據顯示在瀏覽器端,但是POST是不會的。

3.HTTP狀態(tài)碼
HTTP/1.1   200  ok         //響應行

HTTP協議中狀態(tài)碼由三維數字組成,第一位數字定義了響應的類別,且只有以下五種。

  • 1xx:信息提示,表示成功已被成功接收,繼續(xù)處理。范圍100~101.
  • 2xx:成功,服務器成功地處理了請求。其范圍為200~206.
  • 3xx:重定向,重定向狀態(tài)碼用于告訴客戶端,它訪問的資源已被移動,并告訴客戶端新的資源地址位置。這時沒瀏覽器將重新對新資源發(fā)起請求。其范圍300~305.
  • 4xx:客戶端錯誤狀態(tài)碼,又是客戶端會發(fā)送一些服務器無法處理的東西。范圍400~415.
  • 5xx:又是客戶端發(fā)送一條有效請求,但web服務器自身出錯了。5xx是用來描述服務器內部錯誤的,其范圍為500~505。

常見的狀態(tài)碼描述如下。
200:客戶端請求成功,是最常見的狀態(tài)。
302:重定向。
404:請求資源不存在,是最常見的狀態(tài)。
400:客戶端請求語法錯誤,不能被服務器所理解。
401:請求未經授權。
403:服務器收到請求,但是拒絕提供服務。
500:服務器內部錯誤,是最常見的狀態(tài)。
503:服務器當前不能處理客戶端的請求,一段時間后可能恢復正常。

4.HTTP消息

? ? ? ?HTTP消息又稱為HTTP頭,由四部分組成,分別是請求頭,響應頭,普通頭和實體頭。
(1)請求頭
? ? ? ?請求頭只出現在HTTP請求中,請求報頭允許客戶端向服務器端傳遞請求的附加信息和客戶端自身的信息。
①Host
? ? ? ?Host請求報頭域主要用于指定被請求資源的Interbet主機和端口號,例如:HOST:www.xxser.com:801
②User-Agent
? ? ? ?User-Agent請求報頭域允許客戶端將他的操作系統(tǒng),瀏覽器和其他屬性告訴服務器。
③Refere
? ? ? ?Referer包含一個URL,代表當前訪問URL的上一個URL,也就是說用戶是從什么地方來到當前頁面。
④Cookies
? ? ? ?Cookies是非常重要的請求頭,她是一段文本,常用來表示請求者身份等。
⑤Range
? ? ? ?Range可以請求實體的部分內容,多線程下載一定會用到此請求頭。
⑥X-forweard-for
? ? ? ?X-forweard-for即XXF頭,它代表請求端的IP,可以有多個,中間由逗號隔開。
⑦Accept
? ? ? ?Accept請求報頭域用于指定客戶端接手那些MIME類型的信息,如Accept:text/html,表明客戶端希望接收HTML文本。
⑧Accept-Charset請求報頭域用于指定客戶端接收的字符集。例如:Accept-Charset:iso-8859-1,gb2312。如果在請求消息中設置這個域,默認是任何字符集都可以接收。

(2)響應頭
? ? ? ?響應頭是服務器根據請求向客戶端發(fā)送的HTTP頭。
①Server
? ? ? ?服務器所使用的Web服務器名稱,如Server:Apache/1.3.6(Unix),攻擊者通過查看此頭,可以探測web服務器名稱。所以,建議服務器端修改此頭信息。
②Set-Cookie
? ? ? ?向客戶端設置Cookie,通過查看此頭,可以清楚看到服務器向客戶端發(fā)送的Cooie信息。
③Last-Modified
? ? ? ?服務器通過這個頭告訴瀏覽器,資料的最后修改時間。
④Location
? ? ? ?服務器通過這個頭告訴瀏覽器去訪問那個頁面,瀏覽器接收到這個請求之后,通常會立刻訪問localtion頭所指向的頁面。這個頭通常配合302狀態(tài)碼使用。
⑤Refresh
? ? ? ?服務器通過Refresh頭告訴瀏覽器定時刷新瀏覽器。

(3)普通頭
? ? ? ?在普通報頭中,有少數報頭域用于所有請求和響應消息 ,但并不用于被傳輸的實體,只用于傳輸的消息。
例如:Date,表示消息產生的日期和時間。Connection,允許發(fā)送指定連接的選項。例如,指定連接是連續(xù)的,或者指定連接“close”選項,通知服務器,在響應完成后,關閉連接。Cache-Control,用于指定緩存指令,緩存指令是單向的,且是獨立的。
注意:普通報頭了解即可。

(4)實體頭
? ? ? ?請求和響應消息都可以傳送一個實體頭。實體頭定義了關于實體正文和請求所表示的資源的元信息。元信息也就是實體內容的屬性,包括實體信息類型、長度、壓縮方法、最后一次修改時間等。常見的實體頭如下。
①Content-Type
? ? ? ?Content-Type實體頭用于向接收方指示實體的介質類型。
②Content-Encoding
? ? ? ?Content-Encoding頭被用作媒體類型的修飾符,它的值指示了已經被應用到實體正文的附加內容的編碼,因而要獲得中Content-Type報頭域所引用的媒體類型,必須采用相應的解碼機制。
③Content-Length
? ? ? ?Content-Length實體報頭用于指明實體正文的長度,以字節(jié)方式儲存的十進制數字來表示。
④Last-Modified
? ? ? ?Last-Modified實體報頭用于指示資源的最后修改日期和時間。

2.1.4HTTP協議與HTTPS協議的區(qū)別

? ? ? ?HTTPS協議是以安全為目標的HTTP通道,其實就是HTTP的“升級”版本,只是它單純的比HTTP協議更安全。

? ? ? ?HTTPS的安全基礎是SSL,即在HTTP下加入SSL層。也就是HTTPS通過安全傳輸機制進行數據傳輸,這種機制可保護網絡傳送的所有數據的隱秘性與完整性,可以降低非侵入性攔截攻擊的可能性。
HTTP協議與HTTPS協議的主要區(qū)別如下:

  • HTTP是超文本傳輸協議,信息是明文傳輸,HTTPS則是具有安全性的SSL加密傳輸協議。
  • HTTP與HTTPS協議使用的是完全不同的連接方式,HTTP采用80端口連接,而HTTPS則是443端口。
  • HTTPS協議需要到ca申請證書,一般免費的證書很少,需要交費,也有些web容器提供,如TOMCAT。而HTTP協議卻不需要。
  • HTTP連接相對簡單,是無狀態(tài)的,而HTTPS協議是由SSL+HTTP協議構建的課進行加密傳輸、身份認證的網絡協議,相對來說,它要比HTTP協議更安全。
    ? ? ? ?
    ? ? ? ?
    ? ? ? ?
    ? ? ? ?本文大部分內容摘自web安全深度剖析,特為啄木鳥網絡安全工作室新社員編寫,適合小白快速學習使用。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 一、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,738評論 6 152
  • Http協議詳解 標簽(空格分隔): Linux 聲明:本片文章非原創(chuàng),內容來源于博客園作者MIN飛翔的HTTP協...
    Sivin閱讀 5,344評論 3 82
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現,斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • 引言 HTTP是一個屬于應用層的面向對象的協議,由于其簡捷、快速的方式,適用于分布式超媒體信息系統(tǒng)。它于1990年...
    _燴面_閱讀 1,382評論 0 9
  • 在好基友家里住,他8點左右回來的。他在屋里打掃衛(wèi)生,有一搭無一搭的聊著。然后他接了個電話,掛掉后要出去。我問:“誰...
    用屁股思考2017閱讀 1,584評論 0 1

友情鏈接更多精彩內容