Cookie
HTTP/HTTPS |
---|
版本 |
請求方法 |
報文主體 |
頭欄位 |
狀態碼 |
相關主題 |
Cookie(複數形態:Cookies),又稱「小甜餅」。類型為「小型文字檔案」,指某些網站為了辨別使用者身分而儲存在用戶端(Client Side)上的資料(通常經過加密)。由網景公司的前雇員盧·蒙特利在1993年3月發明。最初定義於RFC 2109,歷經RFC 2965,至現在的RFC 6265。目前使用最廣泛的Cookie標準卻不是RFC中定義的任何一個,而是在網景公司制定的標準上進行擴充後的產物。
分類
Cookie儲存在客戶端中,按在客戶端中的儲存位置,可分為記憶體Cookie和硬碟Cookie。
記憶體 Cookie 由瀏覽器維護,儲存在記憶體中,瀏覽器關閉即消失,存在時間短暫。硬碟Cookie儲存在硬碟裡,有過期時間,除非使用者手動清理或到了過期時間,硬碟Cookie不會清除,存在時間較長。所以,按存在時間,可分為非持久Cookie和持久Cookie。
用途
因為HTTP協定是無狀態的,即伺服器不知道使用者上一次做了什麼,這嚴重阻礙了互動式Web應用程式的實現。在典型的網路購物場景中,使用者瀏覽了幾個頁面,買了一盒餅乾和兩瓶飲料。最後結帳時,由於HTTP的無狀態性,不通過額外的手段,伺服器並不知道使用者到底買了什麼,所以Cookie就是用來繞開HTTP的無狀態性的「額外手段」之一。伺服器可以設定或讀取Cookie中包含的資訊,藉此維護使用者跟伺服器對談中的狀態。
在剛才的購物場景中,當使用者選購了第一項商品,伺服器在向使用者傳送網頁的同時,還傳送了一段Cookie,記錄著那項商品的資訊。當使用者存取另一個頁面,瀏覽器會把Cookie傳送給伺服器,於是伺服器知道他之前選購了什麼。使用者繼續選購飲料,伺服器就在原來那段Cookie里追加新的商品資訊。結帳時,伺服器讀取傳送來的Cookie即可。
Cookie另一個典型的應用是當登入一個網站時,網站往往會請求使用者輸入使用者名稱和密碼,並且使用者可以勾選「下次自動登入」。如果勾選了,那麼下次存取同一網站時,使用者會發現沒輸入使用者名稱和密碼就已經登入了。這正是因為前一次登入時,伺服器傳送了包含登入憑據(使用者名稱加密碼的某種加密形式)的Cookie到使用者的硬碟上。第二次登入時,如果該Cookie尚未到期,瀏覽器會傳送該Cookie,伺服器驗證憑據,於是不必輸入使用者名稱和密碼就讓使用者登入了。
Cookie的缺陷
- Cookie會被附加在每個HTTP請求中,所以無形中增加了流量。
- 由於HTTP請求中的Cookie是明文傳遞的,所以安全性成問題,除非使用超文字傳輸安全協定。
- Cookie的大小限制在4 KB左右,對於複雜的儲存需求來說是不夠用的。[3]
使用Cookie
使用者可以改變瀏覽器的設定,以使用Cookie。同時一些瀏覽器內建或安裝開發者工具包允許使用者檢視、修改或刪除特定網站的Cookie資訊。
辨識功能
如果在一台電腦中安裝多個瀏覽器,每個瀏覽器都會以獨立的空間存放Cookie。因為Cookie不但可確認使用者資訊,還包含電腦和瀏覽器的資訊,所以一個使用者使用不同的瀏覽器登入或者用不同的電腦登入,都會得到不同的Cookie資訊,另一方面,對於在同一台電腦上使用同一瀏覽器的多使用者群,Cookie不會區分他們的身分,除非他們使用不同的使用者名稱登入。
反對Cookie者
一些人反對Cookie在網路中的應用,他們的理由如下:
辨識不精確
如果在同一台機器上使用多個瀏覽器,每個瀏覽器在不同的儲存位置儲存Cookie,因此,Cookie並不能定位到一個具體的人,而是使用者、電腦和瀏覽器的組合。
不準確的狀態
如果使用者在取得了一個Cookie之後,點擊了瀏覽器的「回退」按鍵,則瀏覽器的狀態和取得Cookie的狀態就出現了不一致。例如,如果網站基於Cookie技術實現了購物車的應用,當使用者添加了物品後點擊了「回退」按鍵,購物車的物品狀態可能並沒有發生變化。
隱私、安全和廣告
Cookie在某種程度上說已經嚴重危及使用者的隱私和安全。其中的一種方法是:一些公司的高層人員為了某種目的(譬如市場調研)而存取了從未去過的網站(通過搜尋引擎查到的),而這些網站包含了一種叫做網頁臭蟲的圖片,該圖片透明,且只有一個像素大小(以便隱藏),它們的作用是將所有存取過此頁面的電腦寫入Cookie。而後,電子商務網站將讀取這些Cookie資訊,並尋找寫入這些Cookie的網站,隨即傳送包含了針對這個網站的相關產品廣告的垃圾郵件給這些進階人員。
竊取Cookie和指令碼攻擊
雖然Cookie沒有中電腦病毒那麼危險,但它仍包含了一些敏感訊息:使用者名稱、電腦名、使用的瀏覽器和曾經存取的網站。使用者不希望這些內容洩漏出去,尤其是當其中還包含有私人資訊的時候。
這並非危言聳聽,跨網站指令碼(Cross site scripting)可以達到此目的。在受到跨網站指令碼攻擊時,Cookie盜賊和Cookie投毒將竊取內容。一旦Cookie落入攻擊者手中,它將會重現其價值。
- Cookie盜賊:搜集使用者Cookie並行給攻擊者的駭客,攻擊者將利用Cookie訊息通過合法手段進入使用者帳戶。
- Cookie投毒:一般認為,Cookie在儲存和傳回伺服器期間沒有被修改過,而攻擊者會在Cookie送回伺服器之前對其進行修改,達到自己的目的。例如,在一個購物網站的Cookie中包含了顧客應付的款項,攻擊者將該值改小,達到少付款的目的。
Cookie的替代品
鑑於Cookie的局限和反對者的聲音,有如下一些替代方法:
- Brownie方案(頁面存檔備份,存於網際網路檔案館),是一項開放原始碼工程,由SourceForge發起。Brownie曾被用以共享在不同域中的存取,而Cookie則被構想成單一域中的存取。這項方案已經停止開發。
- P3P,用以讓使用者獲得更多控制個人隱私權利的協定。在瀏覽網站時,它類似於Cookie。這項方案也已經停止開發。
- 在與伺服器傳輸資料時,通過在位址後面添加唯一查詢串,讓伺服器辨識是否合法使用者,也可以避免使用Cookie。
參照
- ^ 香港中學會考2008年電腦與資訊科技科(CIT)卷一中文版
- ^ Schwartz, John. Giving Web a Memory Cost Its Users Privacy. The New York Times. 2001-09-04 [2015-10-07]. (原始內容存檔於2011-08-26).
- ^ Mark Pilgrim. HTML5: Up and Running. O』Reilly. 2010. ISBN 978-0596806026.