》据说这篇文章也是快餐,完全符合年轻人的口味,说到登录大家就知道了.每一个有用户系统的相关系统都会有登录的入口,登录是为了确认操作者的正确性。说到登录安全,其实是一个很伟大的命题,但是常用的方法都只是平庸。避免平淡text,专门用来设计用户凭证信息的,切记避免以明文形式存储用户的密码信息,大家还记得过去很多大厂的密码泄露事件吗?在数据表的设计中,除了用户密码的摘要列,需要加上所谓的“salt”列,其实是一个随机生成的字符串,用来和用户密码的摘要结合,生成最终的摘要。mesaltpwd182xxxxxxxxRandomstringhashvalue182xxxxxxxxRandomstringhashvalue如果要写一个过程:当用户第一次注册时,系统随机生成salt,然后和密码按照规则拼接成一个字符串,然后计算哈希值,并将其存储在pwd列中。客户端请求登录界面,上传用户的账号和密码,密码这里推荐md5摘要(也可以用js生成md5)服务端收到请求,根据用户的账号查询对应的salt,拼接根据规则上传密码和盐,然后生成摘要。将上一步生成的摘要与数据库的密码进行比较。如果相同则登录成功;为什么登录失败还要加盐?有了salt,不仅黑客破解难度更大,而且相同密码的用户存储的pwd列也不同,提高了用户信息的安全性。验证码验证码是一种相对便宜但非常有效的防止他人乱来的手段。它通过只有真人才能识别的防伪方法来防止危险。上图是12306的登录界面,看看验证码,是不是已经很心塞了?极。如果你的登录界面不想被别人暴力破解,那么验证码是必须的。对于普通网站来说,验证码程序其实可以很简单,足够用。就像下图使用的技术,服务端将验证码的内容绘制在一张有纹理的图片上,并将绘制的代码内容存储在一个地方,分配一个key,返回key给客户。客户端登录时携带key和用户填写的验证码内容,判断验证码是否正确。”我看到有人把验证码验证放在了客户端,记住,客户端其实是不安全的,连那些被搞糊涂的app,目前几乎所有的系统都支持手机验证码,手机验证码登录是有原因的如此流行,首先这种方式方便,用户不需要记住密码,其次,手机验证码方式的安全系数比较高,因为手机号现在都是实名制,手机号被盗的可能性比较小,而且现在的手机都有指纹锁,即使手机丢了也不怕下场。系统使用手机号登录,可以有效拉近与用户的距离,也有利于国家的监管,毕竟用户的所有信息都可以根据手机号码进行追踪琥珀色。登录设备号时,上传当前设备标识。我认为登录服务器进行身份验证非常重要。为什么?在现在APP满天飞的时代,必须要在APP上实现自动登录。也就是说,如果用户登录过一次app,当用户第一次打开时,需要自动登录,这样在用户体验上会比每次登录好很多。但这面临一个问题:你需要在本地保存用户的登录凭据,切换到浏览器,而这些凭据信息可能保存在cookie中,也可能保存在本地存储中。当然,凭据必须加密。我们需要保证的是,即使这些凭据被黑客知道了,也无法正常登录。我们如何保证?答案是设备。在用户登录请求中必须上传设备号(浏览器也可以用js生成),服务端保存用户的有效设备列表。当然这个有效的设备需要产品经理明确定义,比如最常见的:login已经使用过5次的设备。当然,说到设备,还有一个主设备的概念。至于如何定义主设备,也需要产品端来定义。比如最常见的:手机是主要设备。和微信一样,现在登录PC端需要手机端扫码。切换到业务可以看作是一个需要主设备确认后才能执行的请求。安全设备的概念在多登录场景下非常有用,尤其是需要互踢的时候。登录时间服务器必须记住用户上次登录的时间。在很多情况下,它需要记住用户在某个设备上的最后一次登录时间。这不仅是为了记录和分析用户的登录行为,也是为了分析长时间未登录的用户,使其登录凭证失效,强制其重新登录。虽然HTTPS需要几块钱的证书,但是https在安全方面的作用还是很重要的。本质上也是使用了一种加密算法,比http更耗cpu,传输速度更慢。但是可以有效防止中间人劫持,防止用户信息泄露,还可以防止钓鱼网站的攻击,有效识别网站的真实身份,和其他有利于SEO的东西一样,地址栏的安全锁不会被提及。写在最后上面提到的只是一些最常用的手段,此外,如IP黑名单机制、限流机制等都可以加强登录的安全性。本文转载自微信公众号《建筑师实践之路》,可通过以下二维码关注。转载本文请联系架构师修炼之路公众号。