Cookie的定義

分類[編輯]

Cookie總是保存在客戶端中,按在客戶端中的存儲位置,可分爲內存Cookie和硬盤Cookie。

內存Cookie由瀏覽器維護,保存在內存中,瀏覽器關閉後就消失了,其存在時間是短暫的。硬盤Cookie保存在硬盤裏,有一個過期時間,除非用戶手工清理或到了過期時間,硬盤Cookie不會被刪除,其存在時間是長期的。所以,按存在時間,可分爲非持久Cookie和持久Cookie。

用途[編輯]

因爲HTTP協議是無狀態的,即服務器不知道用戶上一次做了什麼,這嚴重阻礙了交互式Web應用程序的實現。在典型的網上購物場景中,用戶瀏覽了幾個頁面,買了一盒餅乾和兩瓶飲料。最後結帳時,由於HTTP的無狀態性,不通過額外的手段,服務器並不知道用戶到底買了什麼。 所以Cookie就是用來繞開HTTP的無狀態性的“額外手段”之一。服務器可以設置或讀取Cookies中包含信息,藉此維護用戶跟服務器會話中的狀態。

在剛纔的購物場景中,當用戶選購了第一項商品,服務器在向用戶發送網頁的同時,還發送了一段Cookie,記錄着那項商品的信息。當用戶訪問另一個頁面,瀏覽器會把Cookie發送給服務器,於是服務器知道他之前選購了什麼。用戶繼續選購飲料,服務器就在原來那段Cookie裏追加新的商品信息。結帳時,服務器讀取發送來的Cookie就行了。

Cookie另一個典型的應用是當登錄一個網站時,網站往往會請求用戶輸入用戶名和密碼,並且用戶可以勾選“下次自動登錄”。如果勾選了,那麼下次訪問同一網站時,用戶會發現沒輸入用戶名和密碼就已經登錄了。這正是因爲前一次登錄時,服務器發送了包含登錄憑據(用戶名加密碼的某種加密形式)的Cookie到用戶的硬盤上。第二次登錄時,(如果該Cookie尚未到期)瀏覽器會發送該Cookie,服務器驗證憑據,於是不必輸入用戶名和密碼就讓用戶登錄了。

Cookie的缺陷[編輯]

  1. cookie會被附加在每個HTTP請求中,所以無形中增加了流量。
  2. 由於在HTTP請求中的cookie是明文傳遞的,所以安全性成問題。(除非用HTTPS
  3. Cookie的大小限制在4KB左右。對於複雜的存儲需求來說是不夠用的。[2]

使用和禁用Cookies[編輯]

用戶可以改變瀏覽器的設置,以使用或者禁用Cookies。同時一些瀏覽器自帶或安裝開發者工具包允許用戶查看,修改或刪除特定網站的Cookies信息。

識別功能[編輯]

如果在一臺計算機中安裝多個瀏覽器,每個瀏覽器都會以獨立的空間存放cookie。因爲cookie中不但可以確認用戶信息,還能包含計算機和瀏覽器的信息,所以一個用戶使用不同的瀏覽器登錄或者用不同的計算機登錄,都會得到不同的cookie信息,另一方面,對於在同一臺計算機上使用同一瀏覽器的多用戶羣,cookie不會區分他們的身份,除非他們使用不同的用戶名登錄。

反對Cookies者[編輯]

一些人反對cookies在網絡中的應用,他們的理由如下:

識別不精確[編輯]

識別有時候會發生錯誤[編輯]

隱私,安全和廣告[編輯]

Cookies在某種程度上說已經嚴重危及用戶的隱私安全。其中的一種方法是:一些公司的高層人員爲了某種目的(譬如市場調研)而訪問了從未去過的網站(通過搜索引擎查到的),而這些網站包含了一種叫做網頁臭蟲的圖片,該圖片透明,且只有一個象素大小(以便隱藏),它們的作用是將所有訪問過此頁面的計算機寫入cookie。而後,電子商務網站將讀取這些cookie信息,並尋找寫入這些cookie的網站,隨即發送包含了針對這個網站的相關產品廣告的垃圾郵件給這些高級人員。

偷竊Cookies和腳本攻擊[編輯]

雖然cookies沒有中電腦病毒那麼危險,但它仍包含了一些敏感消息:用戶名,電腦名,使用的瀏覽器和曾經訪問的網站。用戶不希望這些內容泄漏出去,尤其是當其中還包含有私人信息的時候。

這並非危言聳聽,跨站點腳本Cross site scripting)可以達到此目的。在受到跨站點腳本攻擊時,cookie盜賊和cookie毒藥將竊取內容。一旦cookie落入攻擊者手中,它將會重現其價值。

  • Cookie盜賊:蒐集用戶cookie併發給攻擊者的黑客。攻擊者將利用cookie消息通過合法手段進入用戶帳戶。
  • Cookie投毒:一般認爲,Cookie在儲存和傳回服務器期間沒有被修改過,而攻擊者會在cookie送回服務器之前對其進行修改,達到自己的目的。例如,在一個購物網站的cookie中包含了顧客應付的款項,攻擊者將該值改小,達到少付款的目的。這就是cookie 投毒。
發佈了55 篇原創文章 · 獲贊 18 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章