本頁使用了標題或全文手工轉換

Cookie

維基百科,自由的百科全書
跳到: 導覽搜尋

Cookie(複數形態Cookies),中文名稱為「小型文字檔案」或「小甜餅」[1],指某些網站為了辨別用戶身份而儲存在用戶端(Client Side)上的資料(通常經過加密)。定義於RFC2109。是網景公司的前僱員盧·蒙特利在1993年3月的發明[2]

分類[編輯]

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左右。對於複雜的儲存需求來說是不夠用的。[3]

使用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投毒。

Cookies的替代品[編輯]

鑑於Cookie的局限和反對者的聲音,有如下一些替代方法:

  • Brownie方案,是一項開放源碼工程,由SourceForge發起。Brownie曾被用以共享在不同域中的存取,而Cookies則被構想成單一域中的存取。這項方案已經停止開發。
  • P3P,用以讓用戶獲得更多控制個人私隱權利的協定。在瀏覽網站時,它類似於Cookie。
  • 在與伺服器傳輸資料時,通過在地址後面添加唯一查詢串,讓伺服器識別是否合法用戶,也可以避免使用Cookie。

外部參考[編輯]

  1. ^ 香港中學會考08年CIT卷一中文版
  2. ^ Schwartz, John. Giving Web a Memory Cost Its Users Privacy. The New York Times. 2001-09-04. 
  3. ^ Mark Pilgrim. HTML5: Up and Running. O』Reilly. 2010. ISBN 978-0596806026.