HTTP協定 (七) Cookie
Cookie是HTTP協定中非常重要的東西, 之前拜讀了Fish Li 寫的【細說Cookie】, 讓我學到了很多東西。Fish的這篇文章寫得太經典了。 是以我這篇文章就沒有太多内容了。
最近我打算寫一個系列的HTTP文章,我站在HTTP協定的角度, 說說我對Cookie的了解。
閱讀目錄
- Cookie是什麼,有什麼用,為什麼要用到Cookie
- Cookie的分類
- Cookie存在哪裡
- 使用和禁用Cookie
- Fiddler檢視HTTP中的Cookie
- 網站自動登陸的原理
- 截獲Cookie,冒充别人身份
- Cookie和檔案緩存的差別
- Cookie洩露隐私
- P3P協定
Cookie是什麼,有什麼用,為什麼要用到Cookie
請看Fish Li 寫的【細說Cookie】
可以大緻把Cookie分為2類: 回話cookie和持久cookie
會話cookie: 是一種臨時的cookie,它記錄了使用者通路站點時的設定和偏好,關閉浏覽器,會話cookie就被删除了
持久cookie: 存儲在硬碟上,(不管浏覽器退出,或者電腦重新開機,持久cookie都存在), 持久cookie有過期時間
Cookie是存在硬碟上, IE存cookie的地方和Firefox存cookie的地方不一樣。 不同的作業系統也可能存cookie的地方不一樣。
不同的浏覽器會在各自的獨立空間存放Cookie, 互不幹涉
以我的windows7, IE8為例, cookie存在這: C:\Users\xiaoj\AppData\Local\Microsoft\Windows\Temporary Internet Files
注意: 緩存檔案和cookie檔案,是存在一起的, 都在這個目錄下。
你也可以這樣找, 打開IE,點選Tools->Internet Options->General Tab下的->Browsing history下的Setting按鈕,彈出的對話框中點選View files.

不同的網站會有不同的cookie檔案
IE: 工具->Internet 選項 -> 隐私
浏覽器把cookie通過HTTP Request 中的“Cookie: header”發送給Web伺服器
Web伺服器通過HTTP Response中的"Set-Cookie: header"把cookie發送給浏覽器
使用Fiddler可以清楚地看到cookie在HTTP中傳遞。 Fiddler工具中可以清晰的看到Http Request 中的Cookie, 和Http Response中的cookie
執行個體: 啟動Fiddler, 啟動浏覽器通路一些購物網站,就可以看到。
我們以”部落格園自動登陸“的例子,來說明cookie是如何傳遞的。
大家知道部落格園是可以自動登陸的。 如下圖,這個是什麼原理呢?
假如我已經在登陸頁面輸入了使用者名,密碼,選擇了儲存密碼,登陸。
(這時候,其實在你的機器上儲存好了登陸的cookie, 不信你可以按照上節介紹方法去你的電腦上找下部落格園的cookie)
當我下次通路部落格園流程如下。
1. 使用者打開IE浏覽器,在位址欄上輸入www.cnblogs.com.
2. IE首先會在硬碟中查找關于cnblogs.com的cookie. 然後把cookie放到HTTP Request中,再把Request發給Web伺服器。
3. Web伺服器傳回部落格園首頁(你會看到你已經登陸了)。
通過上面這個例子,可以看到cookie是很重要的,識别是否是登陸使用者,就是通過cookie。 假如截獲了别人的cookie是否可以冒充他人的身份登陸呢? 當然可以, 這就是一種黑客技術叫Cookie欺騙。
利用Cookie 欺騙, 不需要知道使用者名密碼。就可以直接登入,使用别人的賬戶做壞事。
我知道有兩種方法可以截獲他人的cookie,
1. 通過XSS腳步攻擊, 擷取他人的cookie. 具體原理可以看 [Web安全性測試之XSS]
2. 想辦法擷取别人電腦上儲存的cookie檔案(這個比較難)
拿到cookie後,就可以冒充别人的身份了。 這個過程我就不示範了。
很多人會把cookie和檔案緩存弄混淆, 這兩個完全是不一樣的東西。唯一的相同之處可能是它們倆都存在硬碟上,而且是存在同一個檔案夾下。
關于HTTP緩存請看這 【HTTP協定之緩存】
我們在IE中可以選擇分别删除Cookie和緩存檔案
Cookie 洩露隐私
2013年央視的315晚會上, 曝光了很多不法公司利用Cookie跟蹤并采集使用者的個人資訊,并轉賣給網絡廣告商,形成了一條竊取使用者資訊的灰色産業鍊。進而實作廣告準确投放。嚴重幹擾了使用者的正常網絡應用,侵害了個人的隐私和利益。
我經常就在門戶網站上發現廣告位上顯示的是我在電商網站上流量過的商品。 這就是我的cookie被洩露了。
目前在歐洲, 已經對Cookie立法, 如果網站需要儲存使用者的cookie, 必須彈出一個對話框,要使用者确認後才能儲存Cookie.