Cookie使用和安全

来源:互联网 发布:上海php培训哪家好 编辑:程序博客网 时间:2024/05/22 00:48

Cookie简介

Cookie分为“Persistent”和“Non-Persistent”类型。 “PersistentCookie在浏览器关闭后,Cookie会保存在硬盘上;”Non-Persistent” Cookie只是存在内存中,当浏览器关闭时,Cookie消失。

浏览器通常都提供管理Cookie的功能。

 

Cookie内容

一条Cookie通常由多个“属性=值”格式的元素组成。例如下面是用户登录Gmail时产生的一条Cookie

Set­Cookie: GV=; Domain=mail.google.com; Expires=Sun, 09­Oct­05 13:47:42 GMT; Path=/mail

如上例子,一条Cookie通常有5条参数:

l Cookie的名称  (GV)

l Cookie的值    (空白)

l Cookie的有效期  (Sun, 09­Oct­05 13:47:42 GMT

l Cookie有效的域名  (mail.google.com)

l Cookie有效的路径  (/mail)

除了以上5个参数外,还有其他一些参数,例如为了安全行,可以加上secureHttpOnly

 

Cookie的安全风险

下面列举一些例子,说明了使用cookie可能带来的安全隐患,以及消除这些隐患的方法。

 

1. 域名使用不当

从上面的Cookie例子中可以看到,每条Cookie有一个域名,限定Cookie生效的范围。例如mail.google.com,这样这条cookie只能在这个域名上生效,如果是google.com,就不能生效了,但是在子域名内,例如pop3.mail.google.com应该还是生效。但是如果有人把cookie域名写成了.com或者.edu或者.net等,这样这个cookie对大量的网域都有效。为此有标准“RFC 2965[描述http状态管理的文档]专门规定,默认下,对这样只包含根域名的cookie一概禁止。

尽管如此,风险依然存在,例如一个网站www.abcfootball.com,登录后cookie的域名应该是public.abcfootball.com,但是如果设置成了abcfootball.com,那么意味着cookiepublic.abcfootball.comprivate.abcfootball.com,以及一切子域都有效,这样这条cookie可能会让用户访问到权限限定反问之外的资源。

避免的方法很简单,就是把cookie的域名限定尽量设置准确,详细。

 

2. 路径使用不当

  这个和“域名使用不当”类似,当cookie的限定访问路径设置过大时候,意味着cookie对所有子目录都是有效的,会带来非法访问的可能。例如刚才例子中路径“/mail”设置成了根目录“/”,用户有可能用这条cookie访问到除“/mail”之外的资源.

 

3. “Persistent” Cookie保存登录信息

许多网站在登录时使用类似于“记住登录信息”的功能。这样用户登录的信息【例如用户名,密码】会以“PersistentCookie的形式保存在硬盘上,例如登录Gmail时候,保存的cookie可能是:

    Set­Cookie: rememberme=true;Domain=.google.com;Path=/;Expires=Thu, 21­Apr­2016   12:03:07 GMT

   这样用户在cookie过期之前再登录google.com,网页会直接进入gmailinbox页面这样产生的巨大风险是,当其他用户使用此机器时,一样就自动进入你的邮箱了。

   避免的方法是,当使用完邮箱后,应使用“登出”而不是直接关掉浏览器。开发者处理敏感信息登录时,尽量采用Session机制,SessionID 默认使用“Non PersistentCookie保存,当“登出”或关闭浏览器时,就会自动从内存中消失。

 

4. “Persistent” Cookie保存敏感信息

和上面一样,当用户输入敏感信息进行业务后,这些信息会保存在机器本地,例如网上购物,用户的信用卡信息会保留在磁盘上。

避免这种风险的方法是,尽量少用公共机进行这样业务;或者在业务完成后,使用浏览器的安全管理工具,删除掉所有的Cookie

 

5. 明文传输Cookie

Cookie经常用来存储一些敏感信息,例如session id,如果明文在网上传输,传输过程中很可能被窃取。为了保证cookie不被窃取,需要在cookie中加上“Secure”的属性,这样浏览器也能意识到这是敏感信息,会以不同的security level来对待;会提醒用户,建议以SSL方式来连接,在cookie返回Server时,也以不同的安全级别来传输。

 

6. 缓存中的Cookie

现在缓存被大量应用,以提高网站访问性能。如果包含个人敏感信息的Cookie被存储在缓存上,很可能造成这些信息泄漏。

为避免这种情况,在ResponseHeader中加上去除缓存的属性:

Cache­control: no­cache="set­cookie" 

或者

Cache­control: no­cache="set­cookie2"

一些私有页面同样也不应该被缓存,应该在Header中加上:

Cache­control: private

 

7. 跨域脚本攻击(CSS: Cross Site Scripting Attack

CSS是最普遍的网络攻击手段之一。通过一段恶意的脚本代码,偷取用户本地有效的Cookie,然后发送给恶意攻击者,这些信息可能被非法应用。

网上防范的方法有很多,这里介绍一种方式,给Cookie加上HttpOnly的属性:

Set­Cookie: USER=123; expires=Wednesday, 20­Apr­06 23:12:40 GMT; HttpOnly

“HttpOnly”属性能保证这条Cookie不能被脚本语言执行获取到,而被发送到第三方。这样能保证这条Cookie的安全。

0 0
原创粉丝点击