cookie一段时间免登录、登录保持设计思路

作者: ʘᴗʘ发布时间:2021-11-02 14:42 浏览量:202 点赞:132 售价:0

免登录、登录保持介绍

我们平常访问一些网站的时候,经常需要登录才能做一些更复杂的操作。其中很多网站(尤其是非金钱相关的、安全要求没那么高的网站)经常是登录一次后,只要你不去异地,通常很久很久都可以一直保持登录的状态,每次打开浏览器访问该网站,都不需要重新登录了。

那么,上面说的这种登录保持、免登录是如何实现的呢?

我们知道,一般现代浏览器主要支持两种会话信息储存的方式:CookieSession。session随着浏览器的关闭,通常就失效了,下次打开该网站就是一个全新的sessionID了。所以登录保持、免登录一般基于Cookie来做。但是,因为cookie储存在用户浏览器中,安全环境很复杂,所以必须用一些手段来保证cookie的安全。

Cookie的安全问题及解决方案

cookie保存在用户浏览器中,安全方面主要面临以下几个威胁:

  1. 用户端可以修改cookie内容。
  2. CORS攻击等能够窃取到cookie。
  3. HTTP传输过程,每次都要携带cookie,在网络上泄漏的风险高。

针对以上问题,我们必须逐一解决,才能够实现真正意义上的cookie免登录:

  1. cookie必须加密,最好是非对称加密,客户端的cookie只保存核心信息的key,value还是保存在服务器(这一点类似session的设计机制)。这样,用户就无法直接修改关键信息了。
  2. cookie被窃取的可能有非常多种,难以避免。所以防御的思路是,即使cookie被窃取了,窃取者拿着cookie也无法使用。这时候,我们需要把cookie和用户的IP绑定,当cookie被窃取后,在其他电脑上使用,因为IP不同,所以服务器检测到后做失效处理。(由于中国三大运营商的网络大多都是动态拨号形式的,很多地区的IP基本一天一变,所以这时候绑定用户IP和Cookie的时候,不能简单的绑定IP这个“字符串”,而是要把IP映射为一个地理位置,只要是在这个地理位置附近的IP都可判定为合法请求)
  3. 该问题类似上面的问题,一方面我们通过绑定IP的方式限制cookie的使用范围,另一方面,我们可以升级http请求到https,来增加cookie在网络传输时的安全性。

cookie免登录设计思路

通过上面的技术手段最大限度的解决cookie的安全问题后,我们可以按照以下步骤来设计用户免登录:

  1. 用户在登录页面提交账号密码等信息,点击登录成功后,服务器将用户信息等关键信息+用户IP保存到类似redis的数据库中,并生成一个key作为cookie下发给用户终端。
  2. 用户的后续请求都携带该cookie,服务器收到cookie后,获取用户真实IP,然后和服务器中保存的IP比对,如果地理范围相差不大,可以认为是安全的,对该请求放行。
  3. 用户使用某个cookie访问一段时间后,服务器主动生成新的cookie给用户,老的cookie设置几分钟后过期。(这么做的原因是让cookie在网络上暴露一段时间后就自动更换,减少暴露风险)
  4. 用户退出登录,发起请求到服务器,服务器清除redis等数据库中的信息,用户客户端删除cookie信息(不要只删除客户端的cookie,服务器中存储的对应cookie信息也要删除)

总结

没有百分之百安全的技术,安全防御能做的就是不断的提高攻击的成本,降低防御的成本,让攻击方失去性价比,从而降低被攻击的概率。所以,讨论安全技术手段的时候,不能脱离要保护的资产情况。像cookie免登录等手段,是不适合银行等安全性要求更高的企业的。

版权声明:《cookie一段时间免登录、登录保持设计思路》为CoderBBB作者「ʘᴗʘ」的原创文章,转载请附上原文出处链接及本声明。

原文链接:https://www.coderbbb.com/articles/31

其它推荐:

user

ʘᴗʘ

77
文章数
67945
浏览量
53886
获赞数
67.80
总收入