Cookie 從哪裏來,網站用它來幹嘛?

Cookie,有時也用其複數形式 Cookies。類型爲 “小型文本文件”,是某些網站爲了辨別用戶身份,進行 Session 跟蹤而儲存在用戶本地終端上的數據(通常經過加密),由用戶客戶端計算機暫時或永久保存的信息 。

組成

Cookie 是一段不超過 4KB 的小型文本數據,由一個名稱(Name)、一個值(Value)和其它幾個用於控制 Cookie 有效期、安全性、使用範圍的可選屬性組成。其中:

(1)Name/Value:設置 Cookie 的名稱及相對應的值,對於認證 Cookie,Value 值包括 Web 服務器所提供的訪問令牌  。

(2)Expires 屬性:設置 Cookie 的生存期。有兩種存儲類型的 Cookie:會話性與持久性。Expires 屬性缺省時,爲會話性 Cookie,僅保存在客戶端內存中,並在用戶關閉瀏覽器時失效;持久性 Cookie 會保存在用戶的硬盤中,直至生存期到或用戶直接在網頁中單擊 “註銷” 等按鈕結束會話時纔會失效  。

(3)Path 屬性:定義了 Web 站點上可以訪問該 Cookie 的目錄  。

(4)Domain 屬性:指定了可以訪問該 Cookie 的 Web 站點或域。Cookie 機制並未遵循嚴格的同源策略,允許一個子域可以設置或獲取其父域的 Cookie。當需要實現單點登錄方案時,Cookie 的上述特性非常有用,然而也增加了 Cookie 受攻擊的危險,比如攻擊者可以藉此發動會話定置攻擊。因而,瀏覽器禁止在 Domain 屬性中設置. org、.com 等通用頂級域名、以及在國家及地區頂級域下注冊的二級域名,以減小攻擊發生的範圍  。

(5)Secure 屬性:指定是否使用 HTTPS 安全協議發送 Cookie。使用 HTTPS 安全協議,可以保護 Cookie 在瀏覽器和 Web 服務器間的傳輸過程中不被竊取和篡改。該方法也可用於 Web 站點的身份鑑別,即在 HTTPS 的連接建立階段,瀏覽器會檢查 Web 網站的 SSL 證書的有效性。但是基於兼容性的原因(比如有些網站使用自簽署的證書)在檢測到 SSL 證書無效時,瀏覽器並不會立即終止用戶的連接請求,而是顯示安全風險信息,用戶仍可以選擇繼續訪問該站點。由於許多用戶缺乏安全意識,因而仍可能連接到 Pharming 攻擊所僞造的網站 。

(6)HTTPOnly 屬性 :用於防止客戶端腳本通過 document.cookie 屬性訪問 Cookie,有助於保護 Cookie 不被跨站腳本攻擊竊取或篡改。但是,HTTPOnly 的應用仍存在侷限性,一些瀏覽器可以阻止客戶端腳本對 Cookie 的讀操作,但允許寫操作;此外大多數瀏覽器仍允許通過 XMLHTTP 對象讀取 HTTP 響應中的 Set-Cookie 頭。

認證機制

在 Web 認證中 , 因爲 HTTP 協議本身的侷限,必須採用其他技術將相關認證標記以某種方式持續傳送,以免客戶從一個頁面跳轉至另一個頁面時重新輸入認證信息 。基於 Cookie 的認證過程,主要由以下三個階段組成:

(1)發佈 Cookie。當用戶試圖訪問某 Web 站點中需要認證的資源時,Web 服務器會檢查用戶是否提供了認證 Cookie,如果沒有,則將用戶重定向到登錄頁面。在用戶成功登錄後,Web 服務器會產生認證 Cookie,並通過 HTTP 響應中的 Set-Cookie 頭髮送給客戶端,用於對用戶隨後的請求進行檢查和驗證,接着將用戶重定向到初始請求的資源  。

(2)檢索 Cookie。在用戶隨後的訪問請求中,客戶端瀏覽器檢索 Path 和 Domain 等屬性與用戶請求資源相匹配的 Cookie,並將找到的 Cookie 通過 HTTP 請求中的 Cookie 頭提交給 Web 服務器 。

(3)驗證 CookieWeb 服務器提取客戶端瀏覽器遞交的 Cookie,驗證其中的訪問令牌。若合法,則將訪問請求的資源發送給客戶端瀏覽器;反之則拒絕用戶的訪問請求。Cookie 認證技術簡化了用戶訪問 Web 網站資源的過程,即用戶只需在初次登錄網站時輸入身份信息進行認證,隨後便可以訪問被授權的所有站點資源,不再需要重複手工提交身份信息 。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/D3FOfwm64ggK29i962LBzg