统计登录系统10秒内连续登录失败超过3次的用户

为防止暴力破解用户账号的行为,在输入账号和密码时一般都会限制用户尝试密码输出错误的次数,如果用户多次输错密码后,将在一段时间内锁定账号,常见的有银行类APP、个税App等应用,如下是用户账号密码输入错误的提示图:
在这里插入图片描述
如何实现10秒内连续登录失败超过3次的用户呢有以下几种实现方案

1、登录日志表实现方案

每次用户登录的时候,无论登录是否成功与否,我们后端都要记录用户的登录信息到数据表中,如下一张简单的登录日志表:
在这里插入图片描述
日志表中记录用户账号、登录的来源、登录的ip、本次登录是否成功以及登录时间等基本信息。通过日志表我们就可以实现统计10秒内连续登录失败超过3次的用户,如下的流程图
在这里插入图片描述
用户登录的时候,后端需要查询日志表做统计,通过借助Mysql的一个强大的sql窗口函数row_number()来统计连续的10秒内是否存在超过3次的登录失败的情况:

(1)如果存在连续10秒超过3次登录失败,就需要锁定用户的账号并发送一个邮件通知用户。(2)如果不存在连续10秒超过3次登录失败的情况,返回用户的登录情况(账号密码输入正确,返回登录成功的响应,账号密码输入错误,就返回登录失败的提示)。使用日志表实现统计连续10秒超过3次登录失败的用户方案中存在如下的问题:(a)统计在10秒之内用户超过3次登录失败的用户登录数据,需要使用row_number()窗口函数,一方面统计的sql语句比较复杂,另一方面sql执行的效率也不高。(b)记录用户的登录日志,随着时间的推移数据量会越来越大,这样会影响性能,后续需要做冷数据的迁移,将指定时间(如1个月前)的用户登录数据迁移到冷表中。

2、Redis实现方案

借助Redis实现统计在10秒之内用户超过3次登录失败的流程图如下所示:
在这里插入图片描述
Redis中以用户id为key(如123_login_record),连续登录失败次数为value,并且设置key的过期时间为10秒。

  用户请求登录时候,服务端检测当前用户输入的账号密码是否正确:(a)如果用户账号密码验证通过(登录成功),此时需要将这个用户Redis中的key删除,目的是用来实现记录连续失败的功能。(2)如果用户登录失败,那么需要使用setnx命令来设置用户登录失败的信息,并且Redis的key过期时间为10秒,这个过程中如果set失败代表用户之前已经登录失败过,直接把次数加1就可以了。最后我们只需拿到这个用户账号对应的value,判断这个value是否大于等于3,如果大于等3次,那么需要发送登录异常的提示邮件,锁定用户账号一段时间。

总结:

(1)完成统计10秒内连续登录失败超过3次的用户,可以借助登录日志表实现,也可以借助Redis实现方案。(2)登录日志表实现方案中是借助sql窗口函数row_number()来统计,这种实现方式不但统计的sql复杂,而且随着登录日志表中数据量的增加,sql的执行效率也很低。(3)Redis实现方案key加过期时间来实现,如果用户登录成功就删除这个key,登录失败就在原先登录失败的基础上加1。但为了保证Redis中多个指令执行过程中的原子性,可以借助lua脚本来保证原子性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/72048.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3通过render函数实现一个菜单下拉框

背景说明 鼠标移动到产品服务上时,出现标红的下拉框。 使用纯css的方案实现最简单,但是没什么技术含量,弃之;使用第三方组件库,样式定制麻烦弃之。因此,我们使用vue3直接在页面创建一个dom作为下拉框吧。…

二、重学C++—C语言核心

上一章节: 一、重学C—C语言基础-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/146002496?spm1001.2014.3001.5502 本章节代码: cPart2 CuiQingCheng/cppstudy - 码云 - 开源中国https://gitee.com/cuiqingcheng/cppstudy/tree/…

2-003:MySQL 三层 B+ 树能存多少数据?

1. 计算 B 树能存储多少数据 参数设定 每个数据页(Page)大小:16KB(16384 字节)每个索引节点存储的子节点数量: 索引项大小: 假设 bigint(主键)占 8 字节每个索引项存储…

几种常见的虚拟环境工具(Virtualenv、Conda、System Interpreter、Pipenv、Poetry)的区别和特点总结

在 PyCharm 中创建虚拟环境是一个非常直接的过程,可以帮助你管理项目依赖,确保不同项目之间的依赖不会冲突。 通过 PyCharm 创建虚拟环境 打开 PyCharm 并选择或创建一个项目。 打开项目设置: 在 Windows/Linux 上,可以通过点击…

Windows系统编程项目(四)窗口管理器

本章我们讲解基于对话框的MFC窗口相关的操作 该管理器要实现以下功能 初始化列表 初始化列表表头 初始化图像列表 初始化列表 功能实现 加载菜单 刷新列表 结束进程 隐藏窗口 最大化窗口 最小化窗口 手搓窗口管理器 // CWindowManage.cpp: 实现文件 //#include "pch.h&…

优化 NFS 挂载参数以提升可靠性与容错性

在现代 IT 基础设施中,NFS(网络文件系统)被广泛用于共享文件和存储。虽然 NFS 提供了便利,但在某些情况下,挂载失败或网络问题可能导致挂载操作不稳定。为了提高挂载的可靠性和容错性,我们可以通过优化 NFS…

JavaScript事件循环机制

JavaScript 事件循环机制(Event Loop)详解 JavaScript 是 单线程、非阻塞 语言,依赖 事件循环(Event Loop) 来实现异步编程。它的执行模型包括 调用栈(Call Stack)、任务队列(Task …

大模型架构记录4-文档切分 (chunks构建)

chunks: 块 trunks : 树干 “RAG”通常指 检索增强生成(Retrieval-Augmented Generation) 主要框架:用户提query,找到和它相关的,先把问题转换为向量,和向量数据库的数据做比较,检…

物联网IoT系列之MQTT协议基础知识

文章目录 物联网IoT系列之MQTT协议基础知识物联网IoT是什么?什么是MQTT?为什么说MQTT是适用于物联网的协议?MQTT工作原理核心组件核心机制 MQTT工作流程1. 建立连接2. 发布和订阅3. 消息确认4. 断开连接 MQTT工作流程图MQTT在物联网中的应用 …

第27周JavaSpringboot电商进阶开发 1.企业级用户验证

课程笔记:注册邮箱验证 一、概述 从本小节开始,将学习如何进行注册邮箱验证。主要任务是给项目配置一个公共邮箱(可自己注册或由公司提供),用于向用户发送验证码,帮助用户完成注册流程。课程中以QQ邮箱为…

数据库---sqlite3

数据库: 数据库文件与普通文件区别: 1.普通文件对数据管理(增删改查)效率低 2.数据库对数据管理效率高,使用方便 常用数据库: 1.关系型数据库: 将复杂的数据结构简化为二维表格形式 大型:Oracle、DB2 中型:MySql、SQLServer …

音视频软件工程师面试题

一、基础知识 编解码相关 H.264 和 H.265(HEVC)的主要区别是什么?视频编解码的基本流程是什么?关键技术有哪些?音频编解码(如 AAC、MP3、Opus)的区别和应用场景?什么是 B 帧、P 帧、I 帧?它们的作用是什么? 流媒体协议RTMP、HTTP-FLV、HLS、WebRTC 的区别和应用场景…

【系统架构设计师】测试方法

目录 1. 说明2. 静态测试3. 动态测试4. 黑盒测试5. 白盒测试6. 灰盒测试7. 自动化测试8.例题8.1 例题1 1. 说明 1.软件测试方法的分类有很多种,以测试过程中程序执行状态为依据可分为静态测试(Static Testing,ST)和动态测试&…

tomcat配置应用----server.xml文件具体配置

1.tomcat项目目录 默认项目目录:tomcat安装目录/webapps目录 如上图所示,在tomcat的项目目录下有很多子文件夹,这些子文件夹中都有一个项目首页。 如上图所示,将来我们去使用IP加端口号的方式去访问tomcat的时候,默认是…

Spring Boot 调用DeepSeek API的详细教程

目录 前置准备步骤1:创建Spring Boot项目步骤2:配置API参数步骤3:创建请求/响应DTO步骤4:实现API客户端步骤5:创建控制器步骤6:异常处理步骤7:测试验证单元测试示例Postman测试请求 常见问题排查…

多维数据聚合方案:SQL GROUPING SETS深度解析

一、什么是GROUPING SETS? GROUPING SETS是SQL标准中的多维聚合运算符,允许在单个查询中实现多维度组合的分组统计。相较于传统UNION ALL方案,性能可提升3-10倍(TPC-DS基准测试)。 二、核心语法解析 SELECT column1,…

Excel中国式排名,3种方法!

大家好,我是小鱼。 什么是中国式排名呢? 举个例子比如说公司一共有10名员工进行成绩考核,如果9个人考核成绩都是90分,你是89分,按照国际惯用的排名法则:9 个人考核成绩并列第一,你第10名&…

哪些业务场景更适合用MongoDB?何时比MySQL/PostgreSQL好用?

哪些业务场景更适合用MongoDB?何时比MySQL/PostgreSQL好用? 就像淘宝的个性化推荐需要灵活调整商品标签,MongoDB这种"变形金刚"式的数据库,在处理以下三类中国特色业务场景时更具优势: 一、动态数据就像&q…

深度解读:OpenAI发布GPT-5的技术突破与商业影响

引言 2025年2月,OpenAI正式发布GPT-5,这一被誉为“AI新纪元开篇之作”的模型,不仅实现了技术架构的颠覆性创新,更以免费开放策略引发行业地震。本文将从技术突破、商业影响、行业竞争格局及未来挑战四个维度,全面解析…