Cookie使用和安全

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Session和Cookie安全性都存在一定的问题。Session的安全性主要取决于Session ID的安全性,如果Session ID被猜测或者被盗取,攻击者就可以访问用户的Session数据。为了提高Session的安全性,可以采用加密、哈希等方式对Session ID进行保护。 Cookie安全性也存在一定的问题,如果Cookie被窃取,攻击者就可以模拟用户的身份进行访问。为了提高Cookie安全性,可以采用加密、签名等方式对Cookie进行保护。此外,还可以设置Cookie的过期时间,避免Cookie长时间存在,增加被攻击的风险。 ### 回答2: Session和Cookie是Web应用程序中常用的状态管理技术,用于保存用户信息和访问状态,但它们的安全性也是备受关注的话题。 Session是一种服务器端状态管理技术,通过在服务器端创建和维护Session ID来保存用户状态信息,同时将Session ID存储在客户端的Cookie中。由于Session ID存储在服务器端,从理论上讲,它应该Cookie安全。 但是,在实际应用中,攻击者可以通过一些手段来窃取Session ID。例如,恶意软件可以在用户计算机中浏览器缓存或临时文件中获取Session ID,跨站点脚本攻击也可以通过获取用户的Cookie或者伪造请求来获取Session ID。一旦攻击者获取到Session ID,就可以模拟用户会话,对Web应用程序造成严重危害。 为了保证Session的安全性,需要采取一些措施。例如,使用HTTPS协议来加密Session ID的传输,设置Session的过期时间和Session ID的强度,以及在服务器端对Session进行管理和验证等。 与Session相比,Cookie是一种客户端状态管理技术,将数据保存在用户的计算机中。虽然Cookie本身并不危险,但是在一些情况下,Cookie可能会被篡改或者窃取,从而导致安全风险。例如,恶意软件可以通过窃取Cookie来获取用户的敏感信息,钓鱼攻击则可以通过伪造Cookie来欺骗用户。 为了保护Cookie安全性,需要采取一些方法。例如,使用HTTPOnly属性来限制脚本访问Cookie的能力,使用Secure属性来保证Cookie只能通过HTTPS方式传输,避免Cookie中存储敏感信息,以及使用加密技术来保证Cookie安全。 总的来说,Session和Cookie都是在Web应用程序中常用的状态管理技术,为Web应用程序的安全性带来了挑战。需要采取一些措施来保护它们的安全性,从而保证Web应用程序的安全性和稳定性。 ### 回答3: Session 和 Cookie 作为 Web 开发中最常用的两种技术,都提供了一种存储有关用户信息的方法。它们的安全性是非常重要的,因为它们可能包含用户的敏感信息。下面从 Session 和 Cookie 的概念、使用方式以及安全性出发,介绍 Session 和 Cookie安全性问题。 Session 是一种记录服务器与客户端状态的机制,可以通过保存的数据在用户访问同一站点的不同页面时进行传递,从而实现功能的持续性。使用 Session 记录用户信息时,信息保存在服务器端,客户端只保存一个 session ID(类似于一个标识符)用于向服务器索取相应的数据。由于信息保存在服务器上,所以相对来说比 Cookie 更加安全。 但是,Session 在应用中并不是完全安全的,有一些常见的攻击方式例如 Session Fixation、Session Hijacking、Session Sniffing 等,会导致攻击者获取用户的敏感信息。 Session Fixation 指攻击者通过注入一个已有的,始终不变的 session ID 使用户登录成功,然后通过这组 session ID 去发送请求,这个时候由于 session ID 始终不变,这些请求被认为是合法的,并被服务器处理。这就使攻击者得到了用户的所有信息。 Session Hijacking 指攻击者通过拦截其他用户的 session ID,然后伪造该 ID,从而可以直接访问该用户的 Session 来盗取用户的敏感信息。 Session Sniffing 指攻击者通过窃取用户信息来获取 session ID,从而访问 session,进而获取用户的敏感信息。 而 Cookie 则基于客户端保存用户的信息,最常见的使用方式是将 cookie 存在客户端的浏览器中。如果 Cookie 包含了用户的敏感信息,如密码等,那么它的安全性就会更加脆弱,因为有各种手段可以攻击用户的浏览器,如 XSS(跨站脚本攻击)、CSRF(跨站请求伪造攻击)等。 总之,Session 和 Cookie 都有着各自的优缺点,都需要在应用过程中小心谨慎使用。如果要确保 Session 和 Cookie安全性,最好避免在其存储任何敏感信息,使用 HTTPS 对应用进行加密等。同时,开发人员应该小心谨慎,保持操作的规范性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值