• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

如何设计一个安全的登录流程

技术杂谈 勤劳的小蚂蚁 4个月前 (01-02) 68次浏览 已收录 0个评论 扫描二维码

登录是系统中最重要的一个功能之一,登录成功就能拥有系统的使用权利,所以设计一个安全的登录流程是十分必要的,那在一般登录中需要考虑哪些重要因素呢?我们一一列表一下。
  • 使用https协议进行传输,虽然麻烦,但是很强的保护措施。
  • 强制用户使用有一定强度且复杂的密码,必须要有大小写加数字,长度在8位以上,杜绝像123456之类的弱密码。
  • 密码不要明文保存到数据库,CSDN当年使用明文存储密码导致用户密码被完全暴露,这个事件影响十分严重。所以造成不要使用明文存储密码,要使用像MD5之类的散列算法加密存储,加密之前密码同时还要加上一个不固定的salt值一起拼接加密,一般md5(md5(password) + salt)就可以了,这个salt是盐,一起加密增加密码的长度也增加了破解的难度,盐一般设计为64位随机生成的字符串,最好分开存放,假如用户信息库被攻击了黑客也拿不到盐的库。不能使用可逆的算法,如果可逆,那如何保存密钥是个非常棘手的问题,一般使用明文加密与数据库中的密文对比就能确定密码正确与否,我们不需要知道用户的明文是什么,如果用户忘了可以通过重置或者密码保护问题修改密码,这也比总明文存储要好一万倍。
  • MD5现在已经不是十分安全了,最好使sha256,sha512之类安全强度更高的散列加密算法。
  • 用户名密码错误不要单方面提示,如果密码错误提示用户说密码错误这样攻击者就知道用户名是对的,下次攻击密码,所以不管是用户名还是密码错误都给出同样的提示:用户名或密码错误,或者别的不具体的提示的错误都可以。
  • 前端禁止用户输入导致sql注入的字符,后台也要做sql注入的防护。
  • 保存历史密码,一段时间没登录的用户再次登录时提示要修改密码才能登录,这时新密码不能和历史密码一样,苹果就是这么做的。
  • 保存每次的登录信息日志,如果登录的IP与以往有很大差别,要引导用户重置密码方可登录。
  • 不要在cookie中保留用户密码,如果一定要使用cookie实现自动登录,切记不要使用简单的用户名+密码MD5保存到cookie,要把用户ID、用户名、过期时间、IP、不固定的salt等一起考虑进去,这个当然要可逆,服务端要进行解密才能难是否用户自动登录有效。另外,cookie要设置为http only,这样就不能通过脚本访问cookie,保证cookie的安全性。
  • 不要让浏览器记住密码,虽然记住密码很方便,但也不安全,所以前端最好做控制。
  • 一段时间类的尝试登录失败次数达到某个值,要锁定用户登录,如失败5次锁定24小时。或者间隔性锁定,如失败3次后锁定半小时,再失败1次锁定1小时,再失败1次锁定24小时。
  • 设置会话有效期,比如登录后10分钟不操作就失效,要重新登录。
  • 验证码使用,加上干扰线,防止计算机能够轻易识别,这样也可以防止黑客以程序的方式来尝试登录。
  • 手机登录的一般使用短信验证码的,控制验证码的时效性,即验证码一次有效,一分钟内只能发送一次。
  • 有必要的要采用单点登陆,如果允许用户多处登录的要给用户安全提醒。
  • 重置密码最好通过邮箱发送一定时间内生效的重置链接,或者手机短信验证码,或者两者相结合的方法。像一般的大公司都有设计一个动态密码的东西,手机即一切,所以也要妥善保管自己的动态加密的APP,最好加上指纹或手势。
  • 设置用户可以登录的IP,即IP白名单。像比如财务系统,限制财务人员只能在办公室登录系统。
先总结到这,没有真正安全的登录机制,正所谓道高一尺魔高一丈,我们要做到与时俱进。

丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:如何设计一个安全的登录流程
喜欢 (0)
[247507792@qq.com]
分享 (0)
勤劳的小蚂蚁
关于作者:
温馨提示:本文来源于网络,转载文章皆标明了出处,如果您发现侵权文章,请及时向站长反馈删除。

您必须 登录 才能发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00