自动登录的设计思路

       很多网站登录的时候,都会有一个“记住我”功能,用户可以在限定时间段内免登录,比如豆瓣、人人、新浪微博等都有这种设计。这种技术其实就是基于 cookie的自动登录,用户登录的时候会把需要验证的token写到cookie里面,当用户session失效的时候,token会通过cookie 发送给服务器端,服务器端解析token判断是否已经登录;
       这里面的token如何设计是关键,到底存什么数据才能保证系统的安全性呢?有些新手可能会想,把用户id和password直接md5加密存到cookie,这样做是最糟糕的设计,用户的敏感信息直接暴露出来,黑客可以伪造别人的id进行尝试性登录,可以想象黑客知道了管理员权限账号的id,试过几千几万次,密码和加密算法很可能破解出来。token要相对安全,不应该是简单的用户名和密码md5加密,用户密码其实完全可以不用存进去,分两步来做:

----token 是一些信息的组合,用户id+用户名+expires过期时间+ip地址+salt,具体加密算法最好自己写,不能使是常见的加密函数(md5),当然这 个加密函数必须可逆,这个token我们同时要保存在用户表数据库里面,set cookie的时候记得http only; 

----服务器端拿到cookie之后,进行逆解析,

这个时候我们要验证如下信息:cookie是否过期、ip地址是否发生变化、用户id和用户名是否存在;
用户 存在之后,我们再拿这个token跟第一步存在数据库中的token进行比较,
看是否相等,如果不等说明token已经过期,这样做可保证每次用户登录之 后token值都不一样,
之前用过的token都会失效;


所谓加Salt,就是加点“佐料”。当用户首次提供密码时(通常是注册时),由系统自动往这个密码里加一些“Salt值”,这个值是由系统随机生成的,并且只有系统知道。然后再散列。而当用户登录时,系统为用户提供的代码撒上同样的“Salt值”,然后散列,再比较散列值,已确定密码是否正确。   

这样,即便两个用户使用了同一个密码,由于系统为它们生成的salt值不同,他们的散列值也是不同的。即便黑客可以通过自己的密码和自己生成的散列值来找具有特定密码的用户,但这个几率太小了(密码和salt值都得和黑客使用的一样才行)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值