COOKIE相关知识
Cookie 概述
什么是cookie?
Cookie(复数形态Cookies),中文名称为小型文本文件或小甜饼,一小段文本信息,储存在用户本地终端(Client Side)上的数据(通常经过加密)。定义于RFC2109【征求修正意见书(英语:Request For Comments,缩写为 RFC),是由互联网工程任务组(IETF)发布的一系列备忘录。文件收集了有关互联网相关信息,以及UNIX和互联网社区的软件文件,以编号排定。目前RFC文件是由互联网协会(ISOC)赞助发布。】。为网景公司的前雇员Lou Montulli在1993年3月所发明。
cookie分类
Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。
1.内存cookie。 如果不设置cookie过期时间属性,那么cookie将停留在客户端的内存中,由浏览器控制,这个cookie的生命期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览器会话期的 cookie被称为会话cookie或者内存cookie。
2.硬盘Cookie。是指在你设置了cookie的Expires属性,此时cookie将保存到你的硬盘上,【IE浏览器并且Win7是在
C:\Users \Administrator\AppData\Roaming\Microsoft\Windows\Cookies下面(如果你是 Administrator账号的话)。XP系统火狐浏览器是在C:\Documents and Settings\wangyongguo\LocalSettings\Application Data\Mozilla\Firefox\Profiles\csnsm6dn.default\Cache。】生命周期为expires属性设置的时间。
Cookie分类小结:内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。所以,按存在时间,可分为非持久Cookie和持久Cookie。
Cookie能做什么? (在客户端保存字符串)
Cookie只是一段文本,所以它只能保存字符串。而且浏览器对它有大小限制以及 它会随着每次请求被发送到服务器,所以应该保证它不要太大。 Cookie的内容也是明文保存的,有些浏览器提供界面修改,所以, 不适合保存重要的或者涉及隐私的内容。 如果一定要保存最好加密之后再保存。
Cookie 的限制。
大多数浏览器支持最大为 4096 字节的 Cookie。由于这限制了 Cookie 的大小,最好用 Cookie 来存储少量数据,或者存储用户 ID 之类的标识符。用户 ID 随后便可用于标识用户,以及从数据库或其他数据源中读取用户信息。 浏览器还限制站点可以在用户计算机上存储的 Cookie 的数量。大多数浏览器只允许每个站点存储 20 个 Cookie;如果试图存储更多 Cookie,则最旧的 Cookie 便会被丢弃。有些浏览器还会对它们将接受的来自所有站点的 Cookie 总数作出绝对限制,通常为 300 个。
Cookie的用途。(维护会话,服务器借此可以区分请求是否来自于同一个会话)
1. 因为HTTP协议是无状态的,对于一个浏览器发出的多次请求,WEB服务器无法区分是不是来源于同一个浏览器。所以,需要额外的数据用于维护会话。 Cookie 正是这样的一段随HTTP请求一起被传递的额外数据。服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。所以cookie是用来维护会话的手段之一。
2. Cookie另一个典型的应用是当登录一个网站时,网站往往会请求用户输入用户名和密码,并且用户可以勾选“下次自动登录”。如果勾选了,那么下次访问同一网站时,用户会发现没输入用户名和密码就已经登录了。这正是因为前一次登录时,服务器发送了包含登录凭据(用户名加密码的某种加密形式)的Cookie到用户的硬盘上。第二次登录时,(如果该Cookie尚未到期)浏览器会发送该Cookie,服务器验证凭据,于是不必输入用户名和密码就让用户登录了。
Cookie的缺陷
1 cookie会被附加在每个HTTP请求中,所以无形中增加了流量。
2 由于在HTTP请求中的cookie是明文传递的,所以安全性成问题。(除非用HTTPS)。
3 Cookie的大小限制在4KB左右。对于复杂的存储需求来说是不够用的。
偷窃Cookies和脚本攻击
现在许多网站都有自动登录的功能,原理是把用户名和密码加密之后保存到cookie,也是同样的原理。那么我们假如用户的cookie信息被别人窃取了,之后别人通过设置cookie工具在自己的浏览器中设置cookie。那么这样就可以登录网站,用户的信息就彻底泄漏。
那么黑客是怎么窃取用户cookie信息的呢?我知道有两种方法可以截获他人的cookie,
1. 通过XSS 跨站点脚本(Cross site scripting)可以达到此目的, 获取他人的cookie. 具体原理:
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java, VBScript, ActiveX, Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
攻击手段和目的
攻击者使被攻击者在浏览器中执行脚本后,如果需要收集来自被攻击者的数据(如cookie或其他敏感信息),可以自行架设一个网站,让被攻击者通过JavaScript等方式把收集好的数据作为参数提交,随后以数据库等形式记录在攻击者自己的服务器上。
常用的XSS攻击手段和目的有:
· 盗用 cookie ,获取敏感信息。
· 利用植入 Flash ,通过 crossdomain 权限设置进一步获取更高权限;或者利用Java等得到类似的操作。
· 利用 iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。
· 利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。
· 在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现DDoS攻击的效果。
检测方法
通常有一些方式可以测试网站是否有正确处理特殊字符:
· ><script>alert(document.cookie)</script>
· ='><script>alert(document.cookie)</script>
· "><script>alert(document.cookie)</script>
· <script>alert(document.cookie)</script>
· <script>alert(vulnerable)</script>
· %3Cscript%3Ealert('XSS')%3C/script%3E
· <script>alert('XSS')</script>
· <img src="javascript:alert('XSS')">
· <img src="http://xxx.com/yyy.png" onerror="alert('XSS')">
· <div style="height:expression(alert('XSS'),1)" />(这个仅限 IE 有效)
对付方法: GET POST COOKIE 里的参数用PHP的htmlentities()或是htmlspecialchars()过滤。
2. 想办法获取别人电脑上保存的cookie文件(这个比较难)
P3P协议
从上面看来, Cookie 是一个比较容易泄露用户隐私和危险的东西。 有没有办法保护个人用户隐私呢?
P3P是一种被称为个人隐私安全平台项目(the Platform for Privacy Preferences)的标准,能够保护在线隐私权,使Internet冲浪者可以选择在浏览网页时,是否被第三方收集并利用自己的个人信息。如果一个 站点不遵守P3P标准的话,那么有关它的Cookies将被自动拒绝,并且P3P还能够自动识破多种Cookies的嵌入方式。p3p是由全球资讯联盟网 所开发的。
目前在欧洲, 已经对Cookie立法, 如果网站需要保存用户的cookie, 必须弹出一个对话框,要用户确认后才能保存Cookie.