Cookie

Cookie(复数形態:Cookies),又稱「小甜餅」。類型為「小型文字檔案[1],指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。由网景公司的前雇员盧·蒙特利在1993年3月發明[2]。最初定義於RFC 2109。目前使用最广泛的Cookie标准却不是RFC 中定义的任何一个,而是在网景公司制定的标准上进行扩展后的产物。

分类

Cookie 保存在客户端中,按在客户端中的存储位置,可分为内存 Cookie 和硬盘 Cookie。

内存 Cookie 由浏览器维护,保存在内存中,浏览器关闭即消失,存在时间短暂。硬盘 Cookie 保存在硬盘裡,有过期时间,除非用户手动清理或到了过期时间,硬盘 Cookie 不会清除,存在时间较长。所以,按存在时间,可分为非持久 Cookie 和持久 Cookie。

用途

因为 HTTP 协议是无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式 Web 应用程序的实现。在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干和两瓶饮料。最后结帐时,由于 HTTP 的无状态性,不通过额外的手段,服务器并不知道用户到底买了什么,所以 Cookie 就是用来绕开 HTTP 的无状态性的“额外手段”之一。服务器可以设置或读取 Cookies 中包含的信息,借此维护用户跟服务器会话中的状态。

在刚才的购物场景中,当用户选购了第一项商品,服务器在向用户发送网页的同时,还发送了一段 Cookie,记录着那项商品的信息。当用户访问另一个页面,浏览器会把 Cookie 发送给服务器,于是服务器知道他之前选购了什么。用户继续选购饮料,服务器就在原来那段 Cookie 里追加新的商品信息。结帐时,服务器读取发送来的 Cookie 即可。

Cookie 另一个典型的应用是当登录一个网站时,网站往往会请求用户输入用户名和密码,并且用户可以勾选“下次自动登录”。如果勾选了,那么下次访问同一网站时,用户会发现没输入用户名和密码就已经登录了。这正是因为前一次登录时,服务器发送了包含登录凭据(用户名加密码的某种加密形式)的 Cookie 到用户的硬盘上。第二次登录时,如果该 Cookie 尚未到期,浏览器会发送该 Cookie,服务器验证凭据,于是不必输入用户名和密码就让用户登录了。

  1. Cookie 会被附加在每个 HTTP 请求中,所以无形中增加了流量。
  2. 由于 HTTP 请求中的 Cookie 是明文传递的,所以安全性成问题,除非使用超文本传输安全协定
  3. Cookie 的大小限制在 4 KB 左右,对于复杂的存储需求来说是不够用的。[3]

用户可以改变浏览器的设置,以使用 Cookie。同时一些浏览器自带或安装开发者工具包允许用户查看、修改或删除特定网站的 Cookie 信息。

识别功能

如果在一台计算机中安装多个浏览器,每个浏览器都会以独立的空间存放 Cookie。因为 Cookie 不但可确认用户信息,还包含计算机和浏览器的信息,所以一个用户使用不同的浏览器登录或者用不同的计算机登录,都会得到不同的 Cookie 信息,另一方面,对于在同一台计算机上使用同一浏览器的多用户群,Cookie 不会区分他们的身份,除非他们使用不同的用户名登录。

一些人反对 Cookie 在网络中的应用,他们的理由如下:

识别不精确

如果在同一台机器上使用多个浏览器,每个浏览器在不同的存储位置保存 Cookie,因此,Cookie 并不能定位到一个具体的人,而是用户、计算机和浏览器的组合。

不准确的状态

如果用户在取得了一个 Cookie 之后,点击了浏览器的「回退」按键,则浏览器的状态和取得 Cookie 的状态就出现了不一致。例如,如果网站基于 Cookie 技术实现了购物车的应用,当用户添加了物品后点击了「回退」按键,购物车的物品状态可能并没有发生变化。

隐私、安全和广告

Cookie 在某种程度上说已经严重危及用户的隐私安全。其中的一种方法是:一些公司的高层人员为了某种目的(譬如市场调研)而访问了从未去过的网站(通过搜索引擎查到的),而这些网站包含了一种叫做网页臭虫的图片,该图片透明,且只有一个像素大小(以便隐藏),它们的作用是将所有访问过此页面的计算机写入 Cookie。而后,电子商务网站将读取这些 Cookie 信息,并寻找写入这些 Cookie 的网站,随即发送包含了针对这个网站的相关产品广告的垃圾邮件给这些高级人员。

偷窃Cookies和脚本攻击

雖然Cookies没有中電腦病毒那么危险,但它仍包含了一些敏感訊息:用户名、電腦名、使用的浏览器和曾经访问的网站。用户不希望这些内容洩漏出去,尤其是当其中还包含有私人信息的时候。

这并非危言耸听,跨網站指令碼Cross site scripting)可以达到此目的。在受到跨網站指令碼攻击时,Cookie盗贼和Cookie投毒将窃取内容。一旦Cookie落入攻击者手中,它将会重现其价值。

  • Cookie盗贼:搜集用户Cookie并发给攻击者的黑客,攻击者将利用Cookie訊息通过合法手段进入用户帐户。
  • Cookie投毒:一般认为,Cookie在储存和传回服务器期间没有被修改过,而攻击者会在Cookie送回服务器之前对其进行修改,达到自己的目的。例如,在一个购物网站的Cookie中包含了顾客应付的款项,攻击者将该值改小,达到少付款的目的。

Cookies的替代品

鉴于Cookie的局限和反对者的声音,有如下一些替代方法:

  • Brownie方案页面存档备份,存于,是一项开放源代码工程,由SourceForge发起。Brownie曾被用以共享在不同域中的接入,而Cookies则被构想成单一域中的接入。这项方案已经停止开发。
  • P3P,用以让用户获得更多控制个人隐私权利的协议。在浏览网站时,它类似于Cookie。这项方案也已经停止开发。
  • 在与服务器传输数据时,通过在地址后面添加唯一查询串,让服务器识别是否合法用户,也可以避免使用Cookie。

引用

  1. 香港中學會考2008年電腦與資訊科技科(CIT)卷一中文版
  2. Schwartz, John. . The New York Times. 2001-09-04 [2015-10-07]. (原始内容存档于2011-08-26).
  3. Mark Pilgrim. . O’Reilly. 2010. ISBN 978-0596806026.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.