灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2196回复:0

cookie安全性研究

楼主#
更多 发布于:2013-02-04 13:12
Cookie的格式及组成
 Cookie由变量名和值组成,类似javascript变量。其属性里既有标准的Cookie变量,也有用户自己创建的变量,属性中变量是用“变量=值”形式来保存。
  根据Netscape公司的规定,Cookie格式如下:

  Set-Cookie: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE

  NAME=VALUE:
  这是每一个Cookie均必须有的部分。NAME是该Cookie的名称,VALUE是该Cookie的值。在字符串“NAME=VALUE”中,不含分号、逗号和空格等字符。
 
Expires=DATE:Expires变量是一个只写变量,它确定了Cookie有效终止日期。该属性值DATE必须以特定的格式来书写:星期几,DD-MM-YY HH:MM:SS GMT,GMT表示这是格林尼治时间。反之,不以这样的格式来书写,系统将无法识别。该变量可省,如果缺省时,则Cookie的属性值不会保存在用户的硬盘中,而仅仅保存在内存当中,Cookie文件将随着浏览器的关闭而自动消失。

  Domain=DOMAIN-NAME:Domain该变量是 一个只写变量,它确定了哪些internet域中的web服务器可读取浏览器所存取的Cookie,即只有来自这个域的页面才可以使用Cookie中的信 息。这项设置是可选的,如果缺省时,设置Cookie的属性值为该Web服务器的域名。
  
Path=PATH:Path属性定义了Web服务器 上哪些路径下的页面可获取服务器设置的Cookie。一般如果用户输入的URL中的路径部分从第一个字符开始包含Path属性所定义的字符串,浏览器就认 为通过检查。如果Path属性的值为“/”,则Web服务器上所有的WWW资源均可读取该Cookie。同样该项设置是可选的,如果缺省时,则Path的属性值为Web服务器传给浏览器的资源的路径名。
  可以看出我们借助对Domain和Path两个变量的设置,即可有效地控制Cookie文件被访问的范围。
  
Secure:在Cookie中标记该变量,表明只有当浏览器和Web Server之间的通信协议为加密认证协议时,浏览器才向服务器提交相应的Cookie。当前这种协议只有一种,即为HTTPS。
 Cookies以键值的方式记录会话跟踪的内容.服务器利用响应报头Set-Cookie来发送COOKIE信息.在RFC2109中定义的SET-COOKIE响应报头的格式为:
Set-Cookie: Name = Value; Comment = value; Domain = value; Max-Age = value; Path = Value;
Secure; Version = 1 * DIGIT;

Name 是Cookie的名字,Value是它的值.Name=Value属性值对必须首先出现,在此之后的属性-值对可以以任何顺序出现. 在Servlet规范中,用于会话跟踪的cookie的名字必须是JSESSIONID,Comment属性是可选的,因为Cookie可能包含其它有关 用户私有的信息.这个属性允许服务器说明这个Cookie的使用,用户可以检查这个消息,然话决定是否加入或继续会话.Domain属性也是可选的.它用来指定Cookie在哪一个域中有效.所指定的域必须以点号(.)来开始.Max-Age属性是可选的,用于定义Cookie的生存时间,以秒为单位.如 果超过了这个时间,客户端就应该丢弃这个cookie.如果指定的秒数为0,表示这个cookie应立即被丢弃.Path属性是可选的,用于指定这个 cookie在哪一个URL子集下有效.Secure属性是必需的,它的值是一个十进制数,标识cookie依照的状态管理规范的版本.例如:
set-cookie: uid = zhangsan; Max-Age=3600; Domain=.sun.org; Path=s; Version=1
它表示一个名为uid,值为zhangsan的cookie.生存时间为3600秒,在sunxin.org域的 bbs路径下有效.在3600秒后,客户端将抛弃这个cookie. 当IE收到上面这个响应报头后,可以选择接受或拒绝这个cookie.如果ID接受了这个cookie,当浏览器下一次发送请求到 www.madman.in路径下的资源时,同时也会发送以下的请求报头:
cookie:uid=zhangsan.
实例:基于cookie的重放,将本机的火狐cookie拷贝到另一台机器下的火狐路径中,再次访问被cookie记录的网站,发现不用输入密码。
注:Windows 用户,您可以通过下面的方法进入配置文件夹,点击“开始 > 运行...”,输入 %AppData%\Mozilla\Firefox\Profiles 并按下 Enter 即可。

Linux 用户,请启动一个虚拟终端,输入 cd ~/.mozilla/ 便能进入 Firefox 的配置文件夹。
profiles为火狐的个人配置文件夹。只要把与cookie有关的文件(字符串中包含cookie的文件)拷贝到另一台机器的profiles文件夹内就可以了。
发起
Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的keyalue保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,对于JSP而言也可以直接写入jsessionid,这样服务器可以知道该用户是否合法用户以及是否需要重新登录等。
用途
服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的功用。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入Cookies,以便在最后付款时提取信息。
生存周期
  Cookie可以保持登录信息到用户下次与服务器的会话,换句话说,下次访问同一网站时,用户会发现不必输入用户名和密码就已经登录了(当然,不排除用户手工删除Cookie)。而还有一些Cookie在用户退出会话的时候就被删除了,这样可以有效保护个人隐私。
  Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭页面时,就马上清除 Cookie,不会记录用户信息,更加安全。 ​

喜欢0 评分0
游客

返回顶部