定义
Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”(不超过4KB),是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。
Cookie 是一个保存在客户机中的简单的文本文件,这个文件与特定的Web文档关联在一起,保存了该客户机访问这个Web 文档时的信息,当客户机再次访问这个 Web 文档时这些信息可供该文档使用。这里的信息包括缓存数据、用户名、密码、注册账户、手机号等。
简单理解,当注册登录过一个网站后,后面再次进入这个网站,无需再次登录,而是自动登录并进入首页,其中就是浏览器保存了我们的cookie,记录了一些信息。
组成
Cookie 一般是用键值对表示(key-value),如name=jon,name表示名字,值为jon。它由一个名称、一个值和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成,其中:
① Name/Value :设置Cookie的名称及相对应的值,对于认证Cookie,Value值包括Web服务器所提供的访问令牌 。
② Domain (/doʊˈmeɪn/):可以访问该Cookie的域名,如设置为".baidu.com",注意第一个字符必须为".",则以它结尾的域名都可访问该Cookie。
③ Path:定义了Web站点上可以访问该Cookie的目录。
④ Expires (/ɪkˈspaɪər/):设置Cookie的生存期,即cookie的过期时间,单位是毫秒。有会话性与持久性两种存储类型,Expires属性缺省时,为会话性Cookie,仅保存在客户端内存中,并在用户关闭浏览器时失效;持久性Cookie会保存在用户的硬盘中,直至生存期到或用户直接在网页中单击“注销”等按钮结束会话时才会失效。
⑤ maxAge :Cookie的最大生命周期,单位是秒。如果为整数,则该Cookie在maxAge秒后失效。默认为-1,若为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie。若为0,表示删除该Cookie。
注:Cookie使用Expires和maxAge其中任何一个,都可以用来限制Cookie的生效时间。且两者单独设置,各自生效,但一起设置max-age生效。
⑥ Size :指存储在浏览器中的Cookie的大小,通常以字节(bytes)为单位。
⑦ HTTPOnly :用于防止客户端脚本通过document.cookie属性访问Cookie,有助于保护Cookie不被跨站脚本攻击窃取或篡改,但它的应用仍存在局限性。
⑧ Secure :指定是否使用HTTPS安全协议发送Cookie。使用HTTPS安全协议,可以保护Cookie在浏览器和Web服务器间的传输过程中不被窃取和篡改。
安全威胁
1. Cookie捕获/重放
攻击者可以通过木马等恶意程序,或使用跨站脚本攻击等手段偷窃存放在用户硬盘或内存中的Cookie。对于捕获到的认证Cookie,攻击者往往会猜测其中的访问令牌,试图获取会话ID、用户名与口令、用户角色、时间戳等敏感信息。或者直接重放该Cookie,假冒受害者的身份发动攻击。
2. 恶意 Cookies
在 Cookies 中通过特殊标记语言,引入可执行代码,就很可能给用户造成严重的安全隐患。HTML为区别普通文本和标记语言,用符号“<>”来指示HTML 代码。 这些 HTML 代码或者定义 Web 网页格式,或者引入 Web 浏览器可执行代码段。Web 服务器可以使用Cookies 信息创建动态网页。假使 Cookies 包含可执行恶意代码段,那么在显示合成有该 Cookies 的网页时,就会自动执行这段恶意代码。
3. 会话定置
攻击者向受害者主机注入自己控制的认证Cookie等信息,使得受害者以攻击者的身份登录网站,从而窃取受害者的会话信息。
4. CSRF攻击
跨站请求伪造(Cross-Site Request Forgery,简称CSRF),是指攻击者可能利用网页中的恶意代码强迫受害者浏览器向被攻击的Web站点发送伪造的请求,篡夺受害者的认证Cookie等身份信息,从而假冒受害者对目标站点执行指定的操作。
认证机制
在 Web认证中 ,因为HTTP协议本身的局限,必须采用其他技术将相关认证标记以某种方式持续传送,以免客户从一个页面跳转至另一个页面时重新输入认证信息。基于Cookie的认证过程,主要由以下三个阶段组成:
(1)发布Cookie。当用户试图访问某Web站点中需要认证的资源时,Web服务器会检查用户是否提供了认证Cookie,如果没有,则将用户重定向到登录页面。在用户成功登录后,Web服务器会产生认证Cookie,并通过HTTP响应中的Set-Cookie头发送给客户端,用于对用户随后的请求进行检查和验证,接着将用户重定向到初始请求的资源。
(2)检索Cookie。在用户随后的访问请求中,客户端浏览器检索Path和Domain等属性与用户请求资源相匹配的Cookie,并将找到的Cookie通过HTTP请求中的Cookie头提交给Web服务器。
(3)验证CookieWeb服务器提取客户端浏览器递交的Cookie,验证其中的访问令牌。若合法,则将访问请求的资源发送给客户端浏览器;反之则拒绝用户的访问请求。Cookie 认证技术简化了用户访问 Web 网站资源的过程,即用户只需在初次登录网站时输入身份信息进行认证,随后便可以访问被授权的所有站点资源,不再需要重复手工提交身份信息。
应用
主要有以下三个方面:
① 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
② 个性化设置(如用户自定义设置、主题等)
③ 浏览器行为跟踪(如跟踪分析用户行为等)