有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。定义于RFC2109(已废弃),最新取代的规范是RFC2965。简单来说,Cookies就是服务器暂时存放在你的电脑里的资料(.txt格式的文本文件),好让服务器用来辨认你的计算机。当你在浏览网站的时候,Web服务器会先送一小小资料放在你的计算机上,Cookies 会帮你在网站上所打的文字或是一些选择都记录下来。当下次你再访问同一个网站,Web服务器会先看看有没有它上次留下的Cookies资料,有的话,就会依据Cookie里的内容来判断使用者,送出特定的网页内容给你。
Cookie的生存周期
Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭浏览器时,就马上清除Cookie,不会记录用户信息,更加安全。
C#中的cookie编程
浏览器的cookies存放在哪里?
不同的浏览器保存Cookie的位置都不一样,甚至保存格式都是不一样的。
以IE和firefox为例,IE是把cookie保存在C:\Documents and Settings\用户名\Cookies中,每个cookie是一个txt文件,文件名是以“用户名@网站URL”命名的;
firefox则是把cookie保存在C:\Documents and Settings\用户名\Application Data\Mozilla\Firefox\Profiles\随机目录,在目录下可以看到一个cookie.sqlite文件(firefox3.X版本),所有的cookie都是保存在这个文件中。
其中,谷歌浏览器的cookies存在在C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default
使用Cookie Pal软件查看到的Cookie信息。
Cookie欺骗:
Cookie记录着用户的帐户ID、密码之类的信息,如果在网上传递,通常使用的是MD5方法加密。这样经过加密处理后的信息,即使被网络上一些别有用心的人截获,也看不懂,因为他看到的只是一些无意义的字母和数字。然而,现在遇到的问题是,截获Cookie的人不需要知道这些字符串的含义,他们只要把别人的Cookie向服务器提交,并且能够通过验证,他们就可以冒充受害人的身份,登陆网站。这种方法叫做Cookie欺骗。
Cookie是怎样工作的?
要了解Cookie,必不可少地要知道它的工作原理。一般来说,Cookie通过HTTP Headers从服务器端返回到浏览器上。
首先,服务器端在响应中利用Set-Cookie header来创建一个Cookie ,然后,浏览器在它的请求中通过Cookie header包含这个已经创建的Cookie,并且把它返回至服务器,从而完成浏览器的论证。
例如,我们创建了一个名字为login的Cookie来包含访问者的信息,创建Cookie时,服务器端的Header如下面所示,这里假设访问者的注册名是“Michael Jordan”,同时还对所创建的Cookie的属性如pathdomain、expires等进行了指定。
expires=Monday,01-Mar-99 00:00:01 GMT
上面这个Header会自动在浏览器端计算机的Cookie文件中添加一条记录。浏览器将变量名为“login”的Cookie赋值为“Michael Jordon”。注意,在实际传递过程中这个Cookie的值是经过了URLEncode方法的URL编码操作的。这个含有Cookie值的HTTP Header被保存到浏览器的Cookie文件后,Header就通知浏览器将Cookie通过请求以忽略路径的方式返回到服务器,完成浏览器的认证操作。
此外,我们使用了Cookie的一些属性来限定该Cookie的使用。例如Domain属性能够在浏览器端对Cookie发送进行限定,具体到上面的例子,该Cookie只能传送到指定的服务器上,而决不会跑到其他的如的Web站点上去。Expires属性则指定了该Cookie保存的时间期限,例如上面的Cookie在浏览器上只保存到1999年3月1日1秒。当然,如果浏览器上Cookie 太多,超过了系统所允许的范围,浏览器将自动对它进行删除。至于属性Path,用来指定Cookie将被发送到服务器的哪一个目录路径下。
说明:浏览器创建了一个Cookie后,对于每一个针对该网站的请求,都会在Header中带着这个Cookie;不过,对于其他网站的请求Cookie是绝对不会跟着发送的。而且浏览器会这样一直发送,直到Cookie过期为止。
上一部分讲了有关Cookie的技术背景,这部分来说说在PHP里如何设置、使用、删除Cookie,及Cookie的一些限制。PHP对Cookie支持是透明的,用起来非常方便。
cookie注入原理:
在ASP中,request对象获取
客户端
提交数据常用的是get和post两种方式,同时request对象可以不通过集合来获得数据,即直接使用"request("name")". 但它效率低下,容易出错,当我们省略具体的集合名称时,asp是按QueryString(get),Form(post),Cookie,Severvariable,集合的顺序来搜索的.cookie是保存在客户端的一个文本文件,可以进行修改,这样一来,就可以利用Request.cookie方式来提交变量的值,从而利用系统的
漏洞
进行注入攻击.
cookie注入方式:
首先 我们需要找到一个注入点,如果使用了防注入
系统
的,会阻止你的注入,目前我们是使用get方式提交的参数,要更改成cookie方式提交,我们首先要访问正常的存在注入点的页面,等页面完全打开之后,我们将IE地址栏清空,然后写上:javascript:alert(document.cookie="id="+escape("x")); 这里的“id=”便是“注入点中id=x”中的“id=”,“escape("x")”中的“x”是“id=x”中的“x”了,这两处要根据实际情况来定义。写完之后按下回车网页中会弹出一个对话框
现在更改好了cookie后我们就要试下能不能正常访问了,现在在另外一个窗口中重新打开那个注入点既是将“id=x”去掉后的,然后看是否能正常访问。
如果去掉之后能够继续访问 那么说明可以进行cookie注入,这样就说明程序在使用request对象获取数据的时候并未指明具体使用什么方法来获取,而是直接使用request("xx")的方式。现在cookie形成的一个重要因素已经明确了,接下来我们测试下能否提交特殊字符,看程序是否对数据进行过滤。比如著名的单引号测试法 当然也就可以在语句上添加上手工注入的语句 达到绕过拦截的目的