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

简介: 登录是系统中最重要的一个功能之一,登录成功就能拥有系统的使用权利,所以设计一个安全的登录流程是十分必要的,那在一般登录中需要考虑哪些重要因素呢?我们一一列表一下。

登录是系统中最重要的一个功能之一,登录成功就能拥有系统的使用权利,所以设计一个安全的登录流程是十分必要的,那在一般登录中需要考虑哪些重要因素呢?我们一一列表一下。

使用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白名单。像比如财务系统,限制财务人员只能在办公室登录系统。

先总结到这,没有真正安全的登录机制,正所谓道高一尺魔高一丈,我们要做到与时俱进。

相关文章
|
6月前
|
人工智能 PyTorch API
利用OpenVINO™高效推理MiniCPM4系列模型
面壁智能正式发布端侧MiniCPM 4.0 模型,实现了端侧可落地的系统级软硬件稀疏化的高效创新。
200 0
|
存储 数据安全/隐私保护 索引
设计一个完美的用户角色权限表
设计一个完美的用户角色权限表
1363 1
|
消息中间件 监控 NoSQL
Redis脑裂问题详解及解决方案
Redis脑裂问题是分布式系统中常见的复杂问题,合理配置Redis Sentinel、使用保护模式、采用分布式锁机制以及优化网络和客户端连接策略等措施,可以有效预防和解决脑裂问题。通过深入理解Redis脑裂问题的成因和影响,采取相应的解决方案,能够提高系统的可用性和数据一致性,保障Redis集群的稳定运行。希望本文能帮助你更好地理解和应对Redis脑裂问题。
1181 2
|
存储 JSON 安全
用户登录注册系统的安全性设计
用户登录注册系统的安全性设计
444 4
|
SQL 缓存 NoSQL
社交系统中用户好友关系数据库设计
社交系统中用户好友关系数据库设计
1508 0
|
Ubuntu Linux 网络安全
Docker&Docker Compose安装(离线+在线)
Docker&Docker Compose安装(离线+在线)
19505 1
|
人工智能
通义万象使用总结(1)
从获奖作品中学习精细的提示词和优化技巧,改进自己的作品,最终创造出满意的结果。
968 2
|
数据库 数据安全/隐私保护
RBAC用户权限管理数据库设计
原文来自:http://minjiechenjava.iteye.com/blog/1759482 最近正在为下一项目版本设计权限管理的。看到了这篇文章,可以参考参考! RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。
8294 1
|
缓存 算法 关系型数据库
深度思考:雪花算法snowflake分布式id生成原理详解
雪花算法snowflake是一种优秀的分布式ID生成方案,其优点突出:它能生成全局唯一且递增的ID,确保了数据的一致性和准确性;同时,该算法灵活性强,可自定义各部分bit位,满足不同业务场景的需求;此外,雪花算法生成ID的速度快,效率高,能有效应对高并发场景,是分布式系统中不可或缺的组件。
4005 2
深度思考:雪花算法snowflake分布式id生成原理详解
|
存储 缓存 安全
图解用户登录验证业务流程(推荐)
图解用户登录验证业务流程(推荐)
图解用户登录验证业务流程(推荐)