本页使用了标题或全文手工转换

Cookie

维基百科,自由的百科全书
跳到导航 跳到搜索

HTTP cookie,简称cookie,可譯作「網站/網絡/瀏覽/瀏覽器+魔塊/魔餅/魔片」等,是用户浏览网站时由网络服务器建立并由用户的网页浏览器儲存在计算机或其他设备的小文本文件。

Cookie使Web服务器能够在用户的设备儲存状态信息(如加到在线商店购物车中的商品)或跟踪用户的浏览活动(如点击特定按钮、登录或记录历史)[1]

历史[编辑]

“cookie”一词由网络浏览器程序员盧·蒙特利创造,源自“magic cookie”(1979年就已经出现,当时指UNIX程序收发的数据包)[2][3]。“magic cookie”这个词本身来源于幸运饼干[4]

盧·蒙特利在1994年6月[5]想到这点子时正在網景工作,公司则在为MCI开发电子商务应用程序。文頓·瑟夫約翰·克倫辛代表MCI与网景讨论技术,表示不希望总是由其服务器保存事务状态,而要求网景将状态儲存在用户的计算机中。cookie就是网景提出的解决方案[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-CookieRFC 2965添加了Set-Cookie2头字段,即“RFC 2965 cookie”[13][14],但Set-Cookie2很少用,终于2011年4月的RFC 6265中弃用[15],已经没有现代浏览器可识别Set-Cookie2头字段[16]

结构[编辑]

Cookie的基本结构包括:[17][18][19]

  1. 各种属性

属性[编辑]

一塊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 GMT,或者Wdy, DD Mon YY HH:MM:SS GMT(YY大于或等于0并小于或等于69)。[21]

此外,也可使用Max-Age将cookie的过期时间设置为某一段时间之后(相对于浏览器接收cookie的时间而言)。但一些浏览器可能不支持Max-Age,如Internet Explorer[22][23]

Secure和HttpOnly[编辑]

Secure属性旨在加密cookie,使浏览器仅通过安全/加密连接使用cookie。

HttpOnly要求浏览器不要通过HTTP(和HTTPS)以外的渠道使用cookie。这意味着无法通过用户端脚本语言(尤其是JavaScript)存取cookie,因此无法通过跨站点脚本攻击轻易窃取。[24]

分类[编辑]

階段cookie(session cookie)[编辑]

階段cookie只在用户浏览网站时临时儲存[25],关闭浏览器后会自动过期或删除[26]

持久cookie(persistent cookie)[编辑]

持久cookie只在其创建者设置的特定日期后过期,期间一直有效。

安全cookie(secure 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

外部链接[编辑]