天天看點

《圖解HTTP》讀書筆記第1章 了解Web及網絡基礎第2章 簡單的http協定第3章 HTTP封包内的HTTP資訊第4章 傳回結果的HTTP狀态碼第5章 與http協作的web伺服器第6章 HTTP首部第 7 章 確定 Web 安全的 HTTPS第8章 确認通路使用者身份的認證第9章 基于HTTP的功能追加協定第10章 建構web内容的技術第11章 Web的攻擊技術

第1章 了解Web及網絡基礎

1.1 使用HTTP協定通路Web

HTTP: HyperText Transfer Protocal,超文本傳輸協定/超文本轉移協定。Web是建立在HTTP協定上通信的。

1.2 HTTP的誕生

HTTP于1990年問世,那時候HTTP并沒有作為正式的标準被建立,被稱為HTTP/0.9

HTTP正式作為标準被公布是在1996年5月,版本被命名為HTTP/1.0,該協定至今仍被廣泛用在伺服器端。

HTTP/1.1于1997年1月公布,是目前主流的HTTP協定版本。

HTTP/2.0正在制定中。

1.3 網絡基礎 TCP/IP

通常使用的網絡(包括網際網路)是在TCP/IP協定族的基礎上運作的。而HTTP屬于它内部的一個子集。我們可以把TCP/IP看成是網際網路相關協定的總稱。

TCP/IP協定族按層次分别為以下4層:

應用層:決定了向使用者提供應用服務時的通信活動,該層包括FTP、DNS、HTTP。

傳輸層:對上層應用層,提供處于網絡連接配接中的兩台計算機之間的資料傳輸,該層包括TCP、UDP。

網絡層:用來處理在網絡上流動的資料包,該層規定了通過怎樣的路徑達到對方計算機并把資料包傳送給對方。

資料鍊路層:用來處理連接配接網絡的硬體部分,如:網卡、光纖。

TCP/IP通信傳輸流(http舉例)

(用戶端)HTTP用戶端-->TCP-->IP-->網絡 --|--網絡-->IP-->TCP-->HTTP伺服器(伺服器)

發送端每通過一層則增加首部(header),接收端每通過一層則删除首部。這種方法稱為封裝。

1.4 與HTTP關系密切的協定:IP、TCP和DNS

負責傳輸的 IP 協定

在進行中轉時,會利用下一站中轉裝置的 MAC 位址來搜尋下一個中轉目标。這時,會采用 ARP 協定。ARP 是一種用以解析位址的協定,根據通信方的 IP 位址就可以反查出對應的 MAC 位址。

確定可靠性的 TCP 協定

為了準确無誤地将資料送達目标處,TCP 協定采用了三次握手政策。

1.5 負責域名解析的DNS服務

DNS服務是和 HTTP 協定一樣位于應用層的協定。它提供域名到 IP 位址之間的解析服務。

1.6 各種協定與 HTTP 協定的關系

按流程順序分别為:

DNS服務:把使用者輸入的域名解析為IP位址

HTTP協定:生成針對目标web伺服器的HTTP請求封包

TCP協定:為了友善通信将HTTP請求封包分割成封包段,把每個封包段可靠的傳給對方

IP協定:搜尋對方的位址,一邊中轉一邊傳送

TCP協定:從對方那裡接收封包段并按序号從組請求封包

HTTP協定:對web伺服器請求的内容的處理

1.7 URI 和 URL

URI 用字元串辨別某一網際網路資源,而 URL 表示資源的地點(網際網路上所處的位置)。URL 是 URI 的子集。

差別就是 URI 定義資源,而 URL 不單定義這個資源,還定義了如何找到這個資源(既通路資源的方式)。

第2章 簡單的http協定

2.1 HTTP協定用于用戶端和伺服器端之間的通信

2.2 通過請求和響應的交換達成通信

請求封包是由請求方法、請求URI、協定版本、可選的請求頭部字段和内容實體構成的。

響應封包基本上是由協定版本、狀态碼、用以解釋狀态碼的原因短語、可選的響應首部字段及實體主體構成。

2.3 HTTP是不儲存狀态的協定

HTTP協定自身不對請求和響應之間的通信狀态進行儲存。

2.4 請求URI定位資源

HTTP協定使用URI定位網際網路上的資源。

2.5 告知伺服器意圖的http方法

方法 說明
GET 擷取資源
POST 傳輸實體主體
PUT 傳輸檔案
HEAD 獲得封包首部
DELETE 删除檔案
OPTIONS 詢問支援的方法
TRACE 追蹤路徑
CONNECT 要求用隧道協定連接配接代理
LINK 建立和資源之間的聯系
UNLINK 斷開連接配接關系

2.6 使用方法下達指令

向請求URI指定的資源發送請求封包時,采用成為方法的指令。

2.7 持久連接配接節省通信量

持久連接配接的好處在于減少了TCP連接配接的重複建立和斷開所造成的額外開銷,減輕伺服器端荷載。在HTTP/1.1中所有連接配接預設都是持久連接配接。持久連接配接使得多數請求以管線化方式發送,即能同時并行發送多個請求。

2.8 使用Cookie的狀态管理

Ccookie技術是通過在請求和響應封包中寫入cookie資訊來控制用戶端的狀态。Cookie會根據從伺服器發送的響應封包内的一個叫做Set-Cookie的首部字段資訊,通知用戶端儲存cookie。當下次用戶端再往該伺服器發送請求時,用戶端會自動在請求封包中加入Cookie值後發送出去。伺服器端接收到用戶端發送過來的Cookie後,會去檢查究竟是從哪一個用戶端發來的連接配接請求,然後對比伺服器上的記錄,最後得到之前的狀态資訊。

第3章 HTTP封包内的HTTP資訊

3.1 HTTP封包

HTTP封包大緻可分為封包首部和封包主體兩塊,兩者有最初出現的空行來劃分,通常并不一定要有封包主體。

3.2 請求封包和響應封包的結構

請求行:包含用于請求的方法,請求URI和HTTP版本

狀态行:包含響應結果的狀态碼,原因短語和HTTP版本

首部字段:包含表示請求和響應的各種條件和屬性的各類首部,一般分别為:通用首部、請求首部、響應首部和實體首部。

其他:包含HTTP的RFC裡未定義的首部(Cookie等)

3.3 編碼提升傳輸速率

常用的内容編碼方式有以下幾種:

gzip(GNU zip)

compress(UNIX系統的标準壓縮)

deflate(zlib)

identity(不進行編碼)

3.4 發送多種資料的多部分對象集合

HTTP協定中也采納了多部分對象集合,發送的一份封包主體内可含有多類型實體。多部分對象集合的每個部分類型中,都可以含有首部字段。

3.5 擷取部分内容的範圍請求(Range Request)

執行範圍請求時,會用到首部字段Range來指定資源的byte範圍。針對範圍請求,響應會傳回狀态碼為206 Partial Content的響應封包。

3.6 内容協商傳回最合适的内容

内容協商機制是指用戶端和伺服器端就響應的資源内容進行交涉,然後提供給用戶端最适合的資源。内容協商會以響應資源的語言、字元集、編碼方式等作為判斷的基準。如首部字段中的Accept、Accept-Charset、Accept-Enoding、Accept-Language、Content-Language。

第4章 傳回結果的HTTP狀态碼

狀态碼 類别 含義
1XX informational(資訊性狀态碼) 接收的請求正在處理
2XX Success(成功狀态碼) 請求正常處理完畢
3XX Redirection(重定向狀态碼) 需要進行附加操作已完成請求
4XX Client Error(用戶端錯誤狀态碼) 伺服器無法處理請求
5XX Server Error(伺服器端錯誤狀态碼) 伺服器處理請求出錯
2XX 成功
200 OK 表示從用戶端發來的請求在伺服器端被正常處理
204 No Content 表示伺服器接收的請求已成功處理,但傳回的響應封包中不允許傳回任何實體的主體部分
206 Partial Content 表示用戶端進行了範圍請求,伺服器成功執行了這部分GET請求
3XX 重定向
304 Not Modified 表示用戶端發送附帶條件的GET請求時,其通路的資源(自上次通路以來或者根據請求的條件)未變化
4XX 用戶端錯誤
401 Bad Request 表示封包中存在文法錯誤
403 Forbidden 表示對請求資源的通路被伺服器拒絕了
404 Not Found 表示伺服器上無法找到請求的資源
5XX 伺服器錯誤
501 Internet Sever Error 表示伺服器端在執行請求時發生了錯誤
503 Service Unavailable 表示伺服器暫時處于超負荷或正在停機維護,現無法處理請求

第5章 與http協作的web伺服器

5.1 用單個虛拟主機實作多個域名

HTTP / 1.1 規範允許一台 HTTP 伺服器搭建多個 Web 站點。這是利用虛拟主機的功能。

在網際網路上,域名通過 DNS 服務映射到 IP 位址之後通路目标網站。可見,當請求發送到伺服器時,已經是以 IP 位址形式通路了。是以,當一台托管了兩個域名的伺服器接收到請求時就需要弄清楚究竟要通路哪個域名。

在相同的 IP 位址下,由于虛拟主機可以寄存多個不同主機名和域名的 Web 網站,是以在發送 HTTP 請求時,必須在 Host 首部内完整指定主機名或域名的 URI。

5.2 通信資料轉發程式:代理、網關、隧道

代理

代理是一種有轉發功能的應用程式,它扮演了位于伺服器和用戶端“中間人”的角色,接收由用戶端發送的請求并轉發給伺服器,同時也接收伺服器傳回的響應并轉發給用戶端。代理伺服器的基本行為接收用戶端發送的請求後轉發給其他伺服器,代理不改變請求URI,轉發時需要附加Via首部字段已标記出經過的主機資訊。

使用代理伺服器的理由:利用緩存技術(代理緩存)減少網絡帶寬的流量,組織内部針對特定網站的通路控制,以擷取通路日志為主要目的。

代理有多種使用方法,按兩種基準分類。一種是是否使用緩存,另一種是是否會修改封包:

緩存代理:代理轉發響應時,緩存代理會預先将資源的副本(緩存)儲存在代理伺服器上

透明代理:轉發請求或響應時,不對封包做任何加工的代理類型被稱為透明代理。反之,對 封包内容進行加工的代理被成為非透明代理。

網關

網關是轉發其他伺服器通信資料的伺服器,接收從用戶端發送來的請求時,它就像自己擁有資源的源伺服器一樣對請求進行處理。有時用戶端可能都不會察覺,自己的通信目标是一個網關。

網關的工作機制和代理十分相似。而網關能使通信線路上的伺服器提供非 HTTP 協定服務。

隧道

隧道是在相隔甚遠的用戶端和伺服器兩者之間進行中轉,并保持雙方通信連接配接的應用程式。

隧道本身不會去解析 HTTP 請求。請求保持原樣中轉給之後的伺服器。隧道會在通信雙方斷開連接配接時結束。

5.3 儲存資源的緩存

緩存是指代理伺服器或用戶端本地磁盤内儲存的資源副本。利用緩存可減少對源伺服器的通路,節省通信流量和時間。

緩存伺服器是代理伺服器的一種。當代理轉發從伺服器傳回的響應時,代理伺服器将會儲存一份資源的副本。

緩存伺服器的優勢在于利用緩存可避免多次從源伺服器轉發資源。是以用戶端可就近從緩存伺服器上擷取資源,而源伺服器也不必多次處理相同的請求了。

緩存的有效期限

對于緩存伺服器和用戶端浏覽器,當判定緩存過期或用戶端要求,會向源伺服器确認資源的有效性。若失效,浏覽器會再次請求新資源。

用戶端的緩存

緩存不僅可以存在于緩存伺服器内,還可以存在用戶端浏覽器中。以 Internet Explorer 程式為例,把用戶端緩存稱為臨時網絡檔案。

第6章 HTTP首部

6.2 HTTP 首部字段

使用首部字段是為了給浏覽器和伺服器提供封包主體大小、所使用的語言、認證資訊等内容。

4種HTTP首部字段類型

通用首部字段、請求首部字段、響應首部字段、實體首部字段。

第 7 章 確定 Web 安全的 HTTPS

7.1 HTTP 的缺點

通信使用明文(不加密),内容可能會被竊聽

不驗證通信方的身份,是以有可能遭遇僞裝

無法證明封包的完整性,是以有可能已遭篡改

7.2 HTTP + 加密 + 認證 + 完整性保護 = HTTPS

HTTPS是身披SSL外殼的HTTP。通常,HTTP直接和TCP通信。當使用 SSL 時,則演變成先和 SSL 通信,再由 SSL 和 TCP 通信了。簡言之,所謂 HTTPS,其實就是身披SSL協定這層外殼的HTTP。

在采用SSL後,HTTP就擁有了HTTPS的加密、證書和完整性保護這些功能。SSL是獨立于HTTP的協定,是以不光是 HTTP 協定,其他運作在應用層的 SMTP 和Telnet等協定均可配合 SSL協定使用。可以說SSL是當今世界上應用最為廣泛的網絡安全技術。

SSL 采用一種叫做公開密鑰加密的加密處理方式。HTTPS 采用混合加密機制。

第8章 确認通路使用者身份的認證

計算機本身無法判定坐在顯示器前的使用者的身份。進一步說,也無法确認網絡的那頭究竟有誰。為了确認是否真的具有通路系統的權限,需要核對資訊:

密碼:隻有本人才會知道的字元串資訊。

動态令牌:僅限本人持有的裝置内顯示的一次性密碼。

數字證書:僅限本人(終端)持有的資訊。

生物認證:指紋和虹膜等本人的生理資訊。

IC卡等:僅限本人持有的資訊。

HTTP/1.1使用的認證方式:

BASIC認證

DIGEST認證(摘要認證)

SSL用戶端認證

FormBase認證(基于表單認證)

基于表單認證

Session管理及Cookie狀态管理:

步驟1:用戶端把使用者ID和密碼等登入資訊放入封包的實體部分,通常是以POST方法把請求發送給伺服器。而這時,會使用HTTPS通信來進行HTML表單畫面和使用者輸入資料的發送。

步驟2:伺服器會發放用以識别使用者的Session ID。通過驗證從用戶端發送過來的登入資訊進行身份認證,然後把使用者的認證狀态與Session ID綁定後記錄在伺服器端。

步驟3:用戶端接收到從伺服器端發來的Session ID後,會将其作為Cookie儲存在本地。下次向伺服器發送請求時,浏覽器會自動發送Cookie,是以Session ID也随之發送到伺服器。伺服器端可以通過驗證接收到的Session ID識别使用者和其認證狀态。

第9章 基于HTTP的功能追加協定

9.2 消除HTTP瓶頸的SPDY

HTTP的瓶頸:

使用HTTP協定探知伺服器内容是否更新,就需要頻繁的從用戶端到伺服器端進行确認,如果伺服器上沒有内容更新,此時就會産生徒勞的通信。主要的缺點有:

一條連接配接上隻能發送一個請求

請求隻能從用戶端開始。用戶端不可以接收除響應意外的指令。

請求/響應首部未經壓縮就發送。首部資訊越多延時越大。

發送冗長的首部。每次互相發送相同首部造成的浪費較多。

可任意選擇資料壓縮格式。非強制壓縮發送。

SPDY的設計與功能

SPDY沒有完全改寫HTTP協定,而是在TCP/IP之間應用層和傳輸層之間通過新加入會話的形式運作,同時考慮安全性問題,SPDY規定通信中使用SSL。

SPDY會以會話層加入,控制對資料的流動,但是還是采用HTTP建立通信連接配接。是以可照常使用HTTP的GET和PSOT等方法、Cookie以及HTTP封包等。

9.3使用浏覽器進行全雙工通信的WebSocket

websocket與web浏覽器與web伺服器之間全雙工通信标準。一旦web浏覽器和web伺服器之間建立這種聯系,之後所有的通信都依靠這個專用的協定進行。通信過程中可以互相發送JSON、XML、HTML或者圖檔等任意格式的資料。

第10章 建構web内容的技術

10.1 HTML

為了發送Web上的超文本而開發的标記語言。超文本是一種文檔系統,可将文檔中任意位置的資訊與其他資訊建立關聯,即超連結文本。标記語言是指通過在文檔的某部分穿插特别的字元串标簽,用來修飾文檔的語言。我們把出現在HTML文檔内的這種特殊字元串叫做HTML标簽(tag)

10.2 動态HTML

指使用用戶端腳本語言将靜态的HTML内容變成動态的技術的總稱。動态HTML是通過調用用戶端腳本javascript,實作對HTML的web頁面的動态改造。利用DOM可指定欲發生動态變化的HTML元素。

10.3 Web應用

指通過web功能提供的應用程式,如購物網站、搜尋引擎等。其中由程式建立的内容稱之為動态内容,而事先準備好的内容稱之為靜态内容。web内容則作用于動态内容之上。

10.4資料釋出格式及語言

XML(extensible Markup Language,可擴充标記語言)是一種可按應用目标進行擴充的通用标記語言。旨在通過使用xml,使得網際網路資料共享變得容易。XML和HTML都是從标準通用标記語言SGML簡化而成

RSS(簡易資訊聚合)和Atom都是釋出新聞部落格日志等更新資訊文檔格式的總稱。兩者都用到了XML

JSON是一種以javascript的對象表示法為基礎的輕量級資料标記語言,能夠處理的資料類型有false/null/true/對象/數組/數字/字元串,這7種類型。

第11章 Web的攻擊技術

11.1針對Web的攻擊技術

在用戶端即可篡改請求

在WEB應用中從浏覽器接收到的HTTP請求的全部内容都可以在用戶端自由的變更、篡改。是以web引用可能接收到與預期資料不相同的内容;在HTTP請求封包内加載攻擊代碼就能對web應用發起對web應用的攻擊。

攻擊模式分類

主動攻擊(active attack)主要是攻擊者通過直接通路web應用把攻擊代碼傳入的攻擊模式。由于該模式是針對伺服器上的資源進行攻擊,是以攻擊者需要能夠通路那些資源,主動攻擊模式中具有代表性的有SQL注入攻擊和OS指令注入攻擊。

被動攻擊(passive attack)是指利用圈套政策執行攻擊代碼的攻擊模式。在被動攻擊過程中,攻擊者不直接對目标web應用通路發起攻擊。

11.2因輸出值轉移不完全引發安全漏洞

實施web應用對策大緻可以分為以下兩種:用戶端驗證、web應用端(伺服器端)的驗證。

跨站腳本攻擊

跨站腳本攻擊(XSS)是指通過存在安全漏洞的Web網站注冊使用者的浏覽器内運作非法的HTML标簽或者JavaScript進行的一種攻擊。動态建立的HTML部分可能有隐藏的漏洞,這樣攻擊者編寫腳本陷阱,使用者在自己浏覽器上運作時,一不小心就會受到被動攻擊。

對使用者Cookie的竊取攻擊

通過js腳本竊取Cookie資訊

SQL注入攻擊

SQL注入是指針對Web應用使用的資料庫,通過運作非法的SQL而産生的攻擊。該安全隐患可能會導緻個人資訊及機密資訊的洩露。由于We應用通常會使用到資料庫,如果在調用資料庫語句方式存在疏漏,就有可能被執行惡意注入。

OS指令注入攻擊

OS指令注釋系統是指通過web應用執行非法的作業系統指令達到攻擊的目的。可以從wen應用中通過shell來調用作業系統指令,倘若調用shell時存在疏漏就可以執行插入的非法OS指令,通過os注入攻擊可以執行os上安裝着的各種程式。

HTTP首部注入攻擊

HTTP首部注入攻擊是指攻擊者通過響應首部字段内插入換行,添加任意響應首部或主體的一種攻擊,屬于被動式攻擊。向首部主體添加内容的攻擊方式稱為HTTP響應截斷攻擊

HTTP響應截斷攻擊

HTTP響應截斷攻擊是HTTP首部注入攻擊的一種,攻擊順序相同但是要将%0D%0A%0D%0A并排插入字元串後發送,利用這兩個連續換行就可以做出HTTTP首部與主體分割所需的空行了,這樣就能顯示僞造的主體,達到攻擊的目的。這樣的攻擊稱作HTTP響應截斷攻擊。

郵件首部注入攻擊

是指web應用中的郵件發送功能。攻擊者通過向郵件首部To或者Subject内任意添加非法内容發起的攻擊。

目錄周遊攻擊

對本無意公開的檔案目錄,通過非法截斷其目錄路徑後,達成通路目的的一種攻擊方式。這種攻擊又稱路徑周遊攻擊

遠端檔案包含漏洞

指當部分腳本内容需要從其他檔案讀入時,攻擊者利用指定外部伺服器的URL充當依賴檔案,讓腳本讀取後,就可以運作任意腳本的一種攻擊方式。(主要是PHP存在的安全漏洞)

11.3因設定上或設計缺陷引發的安全漏洞

主要是錯誤設定web伺服器或者是由設計上的一些問題引起的安全漏洞。主要包括下面3個方面

強制浏覽

強制浏覽安全漏洞是指,從安置在web伺服器的公開目錄下的檔案中,浏覽那些原本非自願公開的檔案。強制浏覽可以造成諸如洩露顧客的個人資訊等重要情報、洩露原本需要具有通路權限的使用者才可以查閱的資訊内容、洩露未連接配接到外界的檔案

不正确的錯誤消息處理

指web應用的錯誤小心包含對攻擊者有用的資訊,包括Web應用抛出的錯誤消息、資料庫等系統抛出的錯誤消息

開放重定向

指對任意URL作重定向跳轉的功能。

11.4 因會話管理疏忽引發的安全漏洞

會話管理是用來管理使用者狀态的必備功能,但是如果在會話管理上有所疏忽,就會導緻使用者的認證狀态被竊取等後果。

會話劫持

通過某種非法手段獲得使用者的ID,并非法使用此會話ID僞裝成使用者,達到攻擊的目的。

會話固定攻擊

對以竊取目标會話ID為主動攻擊手段劫持而言,會話固定攻擊(Session Fixation)攻擊會強制使用者使用攻擊者指定的會話ID,屬于被動攻擊

跨站點請求僞造

指攻擊者通過設定好的陷阱,強制對已完成認證的使用者進行非預期的個人資訊或者設定資訊等某些狀态更新,屬于被動攻擊

11.5其他安全漏洞

密碼破解攻擊

點選劫持:指利用透明按鈕或者連結做成陷阱,覆寫在Web頁面之上,又稱頁面僞裝。

dos攻擊:是一種讓運作中的服務呈現停止狀态的攻擊,又稱伺服器停止攻擊或拒絕服務攻擊。Dos攻擊對象不僅限于Web網站還包括網絡裝置及伺服器。主要有兩種方式DoS:集中利用通路請求造成資源過載,資源用盡的同時實際服務也就呈現停止狀态;通過攻擊安全漏洞使服務停止。

後門程式:指開發設定的隐藏入口。