HTTP cookie,簡稱cookie,又稱數碼存根、「網站/瀏覽+魔餅/魔片」等,是瀏覽網站時由網絡伺服器建立並由網頁瀏覽器存放在用戶電腦或其他裝置的小文字檔案。

Cookie使Web伺服器能在用戶的裝置儲存狀態資訊(如添加到線上商店購物車中的商品)或追蹤用戶的瀏覽活動(如點選特定按鈕、登入或記錄歷史)[1]

歷史

「cookie」一詞由網絡瀏覽器程式設計師盧·蒙特利創造,源自「magic cookie」(1979年就已經出現,當時指UNIX程式收發的封包)[2][3]。「magic cookie」這詞本身來自幸運餅[4]

盧·蒙特利在1994年6月[5]想到這點子時正在網景工作,公司則正在為MCI開發電子商務應用程式。文頓·瑟夫約翰·克倫辛代表MCI與網景討論技術,表示不希望總是由其伺服器儲存事務狀態,而要求網景將狀態儲存在用戶電腦。Cookies便是網景提出的解決方案[6][7]

同年,蒙特利與約翰·詹南德雷亞一起編寫了最初的網景cookie規範。1994年10月13日發佈的網景領航員0.9beta版開始支援cookie[8]。它公開的首次使用目的是檢查網景網站的訪問者是否已經訪問過該網站。蒙特利於1995年申請了cookie技術的專利,1998年獲批(US 5774670)。1995年10月發佈的第2版Internet Explorer也宣佈支援cookie[9]

當時,cookie並未為公眾所知,雖然預設用戶接受cookie,網站並不會通知用戶其存在。1996年2月12日,英國《金融時報》發表文章介紹cookie,使其為大眾所知[10]。其潛在的私隱問題也引起討論,1996年和1997年的美國聯邦貿易委員會兩次就cookie舉行聽證會[11]

互聯網工程任務組專門成立了工作小組規範cookie的用法。布萊恩·貝倫多夫和大衛·克里斯托分別提出兩套有關HTTP事務狀態的替代方案。但由克里斯托本人和蒙特利領導的小組很快決定還是使用網景規範。1996年2月,工作群組將第三方cookie確定為嚴重私隱威脅。該小組制定的規範RFC 2109最終於1997年2月發佈,要求第三方cookie要麼根本不允許,要麼至少預設不啟用。[12]

網景的cookie頭欄位Set-Cookie,RFC 2965添加了Set-Cookie2頭欄位,即「RFC 2965 cookie」[13][14],但Set-Cookie2很少使用,終於2011年4月的RFC 6265中棄用[15],已經沒有現代瀏覽器可以辨識Set-Cookie2頭欄位[16]

結構

Cookie的基本結構包括[17][18][19]

  1. 名;
  2. 值;
  3. 各種屬性。

屬性

一塊cookie可能有Domain、Path、Expires、Max-Age、Secure、HttpOnly等多種屬性,如

HTTP/1.0 200 OK
Set-Cookie: LSID=DQAAAK…Eaem_vYg; Path=/accounts; Expires=Wed, 13 Jan 2021 22:23:01 GMT; Secure; HttpOnly
Set-Cookie: HSID=AYQEVn…DKrdst; Domain=.foo.com; Path=/; Expires=Wed, 13 Jan 2021 22:23:01 GMT; HttpOnly
Set-Cookie: SSID=Ap4P…GTEq; Domain=foo.com; Path=/; Expires=Wed, 13 Jan 2021 22:23:01 GMT; Secure; HttpOnly

Domain和Path

DomainPath屬性定義了cookie的範圍。它們告訴瀏覽器cookie屬於什麼網站。Cookies只能設置在當前資源的頂級域及其子域上。

如果伺服器未指定cookie的DomainPath,則它們預設為所請求資源的域和路徑[20]

Expires和Max-Age

Expires屬性定義了瀏覽器應刪除cookie的時間,格式為Wdy, DD Mon YYYY HH:MM:SS GMTWdy, DD Mon YY HH:MM:SS GMT(YY大於或等於0並且小於等於69)。[21]

此外也可用Max-Age將cookie的過期時間設置為某一段時間之後(相對於瀏覽器接收cookie的時間而言)。但Internet Explorer等瀏覽器可能不支援Max-Age[22][23]

Secure和HttpOnly

Secure屬性旨在將cookie加密,使瀏覽器僅通過安全/加密連接使用cookie。

HttpOnly要求瀏覽器不要通過HTTP(和HTTPS)以外的渠道使用cookie。這意味着無法通過客戶端手稿語言(尤其是JavaScript)訪問cookie,因此無法通過跨站點指令碼攻擊輕易竊取。[24]

分類

對談cookie

對談cookie僅在瀏覽網站時臨時儲存[25],關閉瀏覽器後會自動過期或刪除[26]

持久cookie

持久cookie只在其建立者設置的特定日期後過期,期間一直有效。

安全cookie

安全cookie只能通過加密連接傳輸(HTTPS)。它們不能通過未加密的連接傳輸(HTTP),使cookie不易被盜。

用途

對談管理

雖然最初引入cookie是為了讓用戶在瀏覽網站時記錄要購買的物品[6][7]。但現在用戶購物車的內容通常儲存在伺服器的資料庫中,而不再是客戶端的cookie中。

當前對談cookie的常見用途是登入。當用戶訪問網站的登入頁面時,Web伺服器通常會向客戶端傳送一個包含唯一交談識別碼符的cookie。當用戶成功登入時,伺服器會記住該特定交談識別碼符已經過身份驗證,並授予用戶訪問其服務的權限。

喜好設置

許多網站用cookie儲存用戶偏好等設置,向用戶顯示喜好內容。

追蹤

追蹤cookie用於追蹤記錄用戶的網絡瀏覽習慣,如用戶的購物習慣。

瀏覽器設置

大多數現代瀏覽器都支援cookie並允許用戶禁用它們,以下是常見選項:[27]

  • 完全啟用或禁用cookie,以便它們始終被接受或始終被阻止;
  • 使用cookie管理器檢視和有選擇地刪除cookie;
  • 徹底清除cookie等所有私人數據。

此外也有管理cookie權限的附加元件。[28][29][30][31]

安全和私隱

第三方cookie和私隱

網頁可能第三方服務,使用網頁很可能會遇到第三方cookie(訪問網頁外其他伺服器的cookie)。RFC 2109和RFC 2965要求瀏覽器保護用戶私隱,預設不允許在伺服器間共用cookie,但RFC 6265放寬。大多數瀏覽器只要第三方網站有合理的私隱政策申明,就預設允許第三方cookie。[32]

廣告是第三方cookie常見的使用場景,廣告公司藉此追蹤用戶。網站應當告知用戶有第三方cookie存在,不向消費者披露第三方cookie使用情況的網站運營商可能面臨法律風險,一般網站都會在私隱或cookie政策說明其使用的第三方cookie。[33]

竊取Cookie和劫持對談

很多網站用cookie作為用戶的唯一識別碼,但如果網站使用cookie作為交談識別碼符,攻擊者就可以竊取受害者的全套cookie來冒充其請求。

參考文獻

外部連結

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.