Cookie

从网站上发送为了辨别用户身份而储存在用户的网页浏览器的本地终端计算机上的一小段数据

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來冒充其請求。

參考文獻

編輯
  1. ^ What are cookies? What are the differences between them (session vs. persistent)?. Cisco. 2018-07-17 [2022-08-25]. (原始內容存檔於2022-03-17) (英語). 
  2. ^ Wherecookiecomes from :: DominoPower. dominopower.com. [19 October 2017]. (原始內容存檔於19 October 2017). 
  3. ^ magiccookie. The Jargon File (version 4.4.7). [8 September 2017]. (原始內容存檔於6 September 2017). 
  4. ^ Why are internet cookies called cookies?. [2022-08-25]. (原始內容存檔於2022-07-12). 
  5. ^ Schwartz, John. Giving Web a Memory Cost Its Users Privacy. The New York Times. 2001-09-04 [2017-02-19]. (原始內容存檔於2011-08-26). 
  6. ^ 6.0 6.1 Kesan, Jey; and Shah, Rajiv; Deconstructing Code Archive-It存檔,存檔日期2018-08-19, SSRN.com, chapter II.B (Netscape's cookies), Yale Journal of Law and Technology, 6, 277–389
  7. ^ 7.0 7.1 Kristol, David; HTTP Cookies: Standards, privacy, and politics, ACM Transactions on Internet Technology, 1(2), 151–198, 2001 doi:10.1145/502152.502153 (an expanded version is freely available at 存档副本. [2022-08-25]. 原始內容存檔於2014-07-16.  arXiv:cs/0105018v1 [cs.SE])
  8. ^ Kristol, David M. HTTP Cookies. ACM Transactions on Internet Technology. November 2001, 1 (2): 151–198. ISSN 1533-5399. arXiv:cs/0105018 . doi:10.1145/502152.502153. 
  9. ^ Hardmeier, Sandi. The history of Internet Explorer. Microsoft. 2005-08-25 [2009-01-04]. (原始內容存檔於2005-10-01). 
  10. ^ Jackson, T. This Bug in Your PC is a Smart Cookie. Financial Times. 1996-02-12. 
  11. ^ Vamosi, Robert. Gmailcookiestolen via Google Spreadsheets. News.cnet.com. 2008-04-14 [19 October 2017]. (原始內容存檔於9 December 2013). 
  12. ^ Rfc2109. [2022-08-25]. (原始內容存檔於2022-08-01). 
  13. ^ Setting Cookies. staff.washington.edu. June 19, 2009 [March 15, 2017]. (原始內容存檔於March 16, 2017). 
  14. ^ The edbrowse documentation version 3.5 said "Note that only Netscape-style cookies are supported. However, this is the most common flavor of cookie. It will probably meet your needs." This paragraph was removed in later versions of the documentation 網際網路檔案館存檔,存檔日期2017-03-16. further to RFC 2965's deprecation.
  15. ^ Hodges, Jeff. 'HTTP State Management Mechanism' to Proposed Standard. The Security Practice. 6 March 2011 [17 June 2016]. (原始內容存檔於7 August 2016). 
  16. ^ Set-Cookie2 - HTTP | MDN. developer.mozilla.org. [2021-03-08]. (原始內容存檔於2022-03-02). 
  17. ^ Peng, Weihong; Cisna, Jennifer. HTTP Cookies, A Promising Technology. ProQuest (Online Information Review). 2000. ProQuest 194487945. 
  18. ^ Jim Manico quoting Daniel Stenberg, Real worldcookielength limits 網際網路檔案館存檔,存檔日期2013-07-02.
  19. ^ Lee, Wei-Bin; Chen, Hsing-Bai; Chang, Shun-Shyan; Chen, Tzung-Her. Secure and efficient protection for HTTP cookies with self-verification. International Journal of Communication Systems. 2019-01-25, 32 (2): e3857 [2022-08-25]. doi:10.1002/dac.3857. (原始內容存檔於2022-06-10) (英語). 
  20. ^ HTTP State Management Mechanism, The Path Attribute. IETF. March 2014 [2011-05-12]. (原始內容存檔於2011-05-01). 
  21. ^ RFC 6265, HTTP State Management Mechanism. ietf.org. [2011-05-12]. (原始內容存檔於2011-05-01). 
  22. ^ Cookies specification compatibility in modern browsers. inikulin.github.io. 2016 [2016-09-30]. (原始內容存檔於2016-10-02). 
  23. ^ Coles, Peter. HTTP Cookies: What's the difference between Max-age and Expires? – Peter Coles. Mrcoles.com. [28 July 2016]. (原始內容存檔於29 July 2016). 
  24. ^ Symantec Internet Security Threat Report: Trends for July–December 2007 (Executive Summary) (PDF) XIII. Symantec Corp.: 1–3. April 2008 [May 11, 2008]. (原始內容存檔 (PDF)於June 25, 2008). 
  25. ^ Microsoft Support Description of Persistent and Per-Session Cookies in Internet Explorer 網際網路檔案館存檔,存檔日期2011-09-25. Article ID 223799, 2007
  26. ^ Maintaining session state with cookies. Microsoft Developer Network. [22 October 2012]. (原始內容存檔於14 October 2012). 
  27. ^ Whalen, David. The UnofficialcookieFAQ v2.6. Cookie Central. June 8, 2002 [2009-01-04]. (原始內容存檔於August 24, 2011). 
  28. ^ How to Manage Cookies in Internet Explorer 6. Microsoft. December 18, 2007 [2009-01-04]. (原始內容存檔於December 28, 2008). 
  29. ^ Clearing private data. Firefox Support Knowledge base. Mozilla. 16 September 2008 [2009-01-04]. (原始內容存檔於3 January 2009). 
  30. ^ Clear Personal Information : Clear browsing data. Google Chrome Help. [2009-01-04]. (原始內容存檔於2009-03-11). 
  31. ^ Clear Personal Information: Delete cookies. Google Chrome Help. [2009-01-04]. (原始內容存檔於2009-03-11). 
  32. ^ Site Compatibility for Firefox 22, Mozilla Developer Network, 2013-04-11 [2013-04-11], (原始內容存檔於2013-05-27) 
  33. ^ Miyazaki, Anthony D. (2008), "Online Privacy and the Disclosure ofcookieUse: Effects on Consumer Trust and Anticipated Patronage," Journal of Public Policy & Marketing, 23 (Spring), 19–33

外部連結

編輯