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

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

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

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

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

相关文章
|
4月前
|
Windows
COMSOL Multiphysics 6.3安装教程 Windows版:文件导入+自定义路径指南
COMSOL Multiphysics是一款基于物理场的多物理场仿真软件,支持建模、分析与优化各类工程系统。本文提供6.3版(含许可证)的详细安装指南,涵盖下载、解压、管理员安装、许可证加载及路径配置等步骤,助您快速完成本地部署并启动使用。(239字)
2059 1
|
5月前
|
安全 Java 关系型数据库
分布式权限体系破局:统一认证授权与 OAuth2.0 全链路架构落地实战
本文系统阐述分布式架构下基于OAuth2.0的统一认证授权体系:剖析微服务权限痛点,厘清认证与授权本质区别;详解OAuth2.0四大角色、授权码等安全模式及JWT等易混淆概念;设计分层架构与RBAC权限模型;提供Spring Authorization Server实战搭建(含数据库、配置、代码)及全流程调用示例;并给出生产环境令牌安全、客户端管控与审计加固等最佳实践。
696 1
|
10月前
|
消息中间件 监控 Java
《聊聊线程池中线程数量》:不多不少,刚刚好的艺术
本文深入探讨Java线程池的核心参数与线程数配置策略,结合CPU密集型与I/O密集型任务特点,提供理论公式与实战示例,帮助开发者科学设定线程数,提升系统性能。
|
Java 关系型数据库 MySQL
深入解析 @Transactional——Spring 事务管理的核心
本文深入解析了 Spring Boot 中 `@Transactional` 的工作机制、常见陷阱及最佳实践。作为事务管理的核心注解,`@Transactional` 确保数据库操作的原子性,避免数据不一致问题。文章通过示例讲解了其基本用法、默认回滚规则(仅未捕获的运行时异常触发回滚)、因 `try-catch` 或方法访问修饰符不当导致失效的情况,以及数据库引擎对事务的支持要求。最后总结了使用 `@Transactional` 的五大最佳实践,帮助开发者规避常见问题,提升项目稳定性与可靠性。
2151 12
|
人工智能 PyTorch API
利用OpenVINO™高效推理MiniCPM4系列模型
面壁智能正式发布端侧MiniCPM 4.0 模型,实现了端侧可落地的系统级软硬件稀疏化的高效创新。
490 0
|
消息中间件 监控 NoSQL
Redis脑裂问题详解及解决方案
Redis脑裂问题是分布式系统中常见的复杂问题,合理配置Redis Sentinel、使用保护模式、采用分布式锁机制以及优化网络和客户端连接策略等措施,可以有效预防和解决脑裂问题。通过深入理解Redis脑裂问题的成因和影响,采取相应的解决方案,能够提高系统的可用性和数据一致性,保障Redis集群的稳定运行。希望本文能帮助你更好地理解和应对Redis脑裂问题。
1654 2
|
编译器 芯片
proteus并行接口芯片8255A的应用—键盘与数码管
proteus并行接口芯片8255A的应用—键盘与数码管
831 1
|
前端开发 安全 数据安全/隐私保护
详解前端登录流程:实现原理与最佳实践
详解前端登录流程:实现原理与最佳实践
|
存储 JSON 安全
用户登录注册系统的安全性设计
用户登录注册系统的安全性设计
575 4

热门文章

最新文章