cookie是什么
cookie是当前的识别用户,实现持久会话的最好方式。就是服务给访问它的客户端贴上唯一标签,客户端访问服务器时,都会带着这个标签,这样服务器就能识别了。
可以将cookie分为两类
会话cookie和执行cookie。
会话cookie:临时cookie,它记录了用户访问网站的设置和偏好。用户退出浏览器时,会话cookie就会删除。
持久cookie:它存储在硬盘,浏览器退出时,它仍然存在。
它们之前的差别就是过期时间。
存在的安全隐患
第三方网站使用持久cookie来跟踪用户,这就是最大的滥用。将这种做法与IP地址和Referer首部信息结合在一起,这些营销公司就可以构建起相当精确的用户档案和浏览模式信息。
虽然Cookies没有中计算机病毒那么危险,但它仍包含了一些敏感消息:用户名、计算机名、使用的浏览器和曾经访问的网站。用户不希望这些内容泄漏出去,尤其是当其中还包含有私人信息的时候。
这并非危言耸听,跨站点脚本(Cross site scripting)可以达到此目的。在受到跨站点脚本攻击时,Cookie盗贼和Cookie毒药将窃取内容。一旦Cookie落入攻击者手中,它将会重现其价值。
- Cookie盗贼:搜集用户Cookie并发给攻击者的黑客,攻击者将利用Cookie消息通过合法手段进入用户帐户。
- Cookie投毒:一般认为,Cookie在储存和传回服务器期间没有被修改过,而攻击者会在Cookie送回服务器之前对其进行修改,达到自己的目的。例如,在一个购物网站的Cookie中包含了顾客应付的款项,攻击者将该值改小,达到少付款的目的。
使用cookie
Set-Cookie属性 | 说明 | 例子 |
---|---|---|
NAME=VALUE | 强制的。NAME和VALUE都是字符序列。Web服务器可以创建任意的NAME=VALUE关联。 | Set-Cookie:Name=Tom |
Expires | 可选的。日期字符串。定义cookie的实际生存期。一旦过了过期日期,就不再存储或发布这个cookie了。 | Set-Cookie:Name=Tom; expires=Wednesday,09-Nov-99 20:00:00 GMT |
Domain | 可选的。浏览器只向指定域中的服务器主机名发送cookie。这样服务器就将cookie限制在了特定的域中。 | Set-Cookie:Name=Tom; domain:“cnblogs.com” |
Path | 可选的。通过这个属性可以位服务器上特定的文档分配cookie。 | Set-Cookie:Name=Tom; path=/abc用户访问http://www.abc123.com 可能获得一个cookie: Name=Tom |
Secure | 可选的。如果包含了这一属性,就只有在HTTP使用SSL安全连接时才会发送cookie。 | Set-Cookie:Name=Tom; secure |