设计登陆验证码的逻辑

news/2024/11/6 1:46:32/文章来源:https://www.cnblogs.com/azwz/p/18524600

今日面试某信息的场景题提到了下这个问题,没太搞懂面试官具体想让我说的就是两个接口的设计,一个生成验证码,一个校验验证码,和其具体的设计方案,没听懂当时的意思,有的小懵逼,因此回头总结回顾一下,日常开发中对这些小细节还是要注重一下,不能因为场景逻辑简单就不去分析其背后的原因。

设计登陆验证码的时候有个重要的点就是接口防刷与唯一id校验,防止别人暴力的时候使用到了数据库正常的验证码,导致其他人无法登陆,虽然这个概率有些小吧。

先上普通登陆业务图

 首先要考虑的点:

1.验证码防恶意刷

2.验证码输入错误后应对数据库查询账户密码匹配做一个拦截

3.验证码存储在哪里,成功后记得删除该条验证码

4.唯一ID的生成逻辑

5.前端接口暴露什么,生成验证码的url暴露了怎么防恶意刷

根据上述分析,我们需要分别实现验证码的生成、展示、id生成、存储的接口,一般验证码服务需要对外提供生成验证码和校验验证码的api,我们写在一个接口中,四个组件以内部接口类的形式进行开发。验证码生成公式与结果可以抽出来为工具类,公示转图片也为工具类。

防止url恶意刷可以通过url加密(拦截请求url,对上一级url如login拦截,获取login/后的密文,解析后与login中方法进行比较,存在则转发正确的路由),还有就是合理的限流方案,比如redis滑动窗口(见前文),nginx配置限流策略(limit_req_zone 和 limit_req 两个指令,限制单个IP的请求处理速率)(Nginx 限流方式(速率限流、并发限流及黑白名单配置)_nginx 限流类型-CSDN博客),令牌桶(设置一个桶,当达到桶容量后其他请求等待,待前面处理完成后再进入桶中)布隆过滤器的简单限流等对接口请求次数做一个限制,甚至于hyperloglog基数统计进行限流(唯一id是key,在前面多加个统计key就能避免key重复,过期时间10秒,10秒内请求具有一次则不再请求,或者20s内达到10次进行删除缓存,封禁ip.。。)这样接口防刷就完成了;

回归主题,验证码项目如果引入了redis直接用redis就好,用全局唯一id生成的方式生成id就行,uuid,(当时觉得说个uuid太简单了,想现说个全局唯一id生成,结果没说上来还没说uuid生成原理这个,太蠢了我)

@Component("UUIDKeyGenerator")
public class UUIDKeyGenerator implements CheckCodeService.KeyGenerator {@Overridepublic String generate(String prefix) {String uuid = UUID.randomUUID().toString();return prefix + uuid.replaceAll("-", "");}
}

 存储使用唯一id+验证码值value即可,计算式给图片生成器就行,没必要存储,最后把图片和uuid统一传给前端,后端响应先校验验证码然后匹配账号就行。 

 

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

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

相关文章

使用最新版的wvp和ZLMediaKit搭建Gb28181测试服务器

目录说明安装1.安装nodejs简介安装步骤2.安装java环境3.安装mysql安装修改密码4.安装redis5.安装编译器6.安装cmake7.安装依赖库8.编译ZLMediaKit9.编译wvp-GB28181-pro配置1.ZLMediaKit配置2.wvp-GB28181-pro配置2.1.配置ZLMediaKit连接信息2.2.28181服务器的配置2.3.配置web服…

在昇腾Ascend 910B上运行Qwen2.5推理

使用 GPUStack 在昇腾 Ascend 910B 上运行 Qwen2.5 全系列的推理性能表现目前在国产 AI 芯片,例如昇腾 NPU 上运行大模型是一项广泛且迫切的需求,然而当前的生态还远未成熟。从底层芯片的算力性能、计算架构的算子优化,到上层推理框架对各种模型的支持及推理加速,仍有很多需…

MMCA:多模态动态权重更新,视觉定位新SOTA | ACM MM24 Oral

来源:晓飞的算法工程笔记 公众号,转载请注明出处论文: Visual Grounding with Multi-modal Conditional Adaptation论文地址:https://arxiv.org/abs/2409.04999 论文代码:https://github.com/Mr-Bigworth/MMCA创新点提出了多模态条件适应(MMCA)方法,该方法从一种新颖的权…

PbootCMS前端页面样式丢失

前端页面样式丢失问题原因:静态资源文件路径不正确或文件缺失。 解决方法:检查 static 目录下的 CSS 和 JS 文件是否存在。 确保前端页面引用的静态资源路径正确。 清除浏览器缓存,重新加载页面。扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,…

PbootCMS生成的 sitemap.xml 中增加 tag 标签链接

问题描述:PbootCMS默认生成的 sitemap.xml 不包含 tag 标签链接。 解决方法:打开 /apps/home/model/SitemapModel.php,在第78行后增加以下代码:// 指定分类标签调用 public function getSortTags($scode) {$join = array(array(ay_content_sort b, a.scode=b.scode, LEFT),…

帝国CMS tags 页列表页内容页调用函数版代码

添加函数在 /e/class/userfun.php 文件中添加以下代码:function tagslink($aid, $num = 5, $tbname = news) {global $public_r, $dbtbpre, $empire, $navinfor, $class_r;$qr = $empire->fetch1("select rewritetags from {$dbtbpre}enewspublic limit 1");$sr …

宝塔搬家后提示“502 Bad Gateway”的解决方法

问题现象:服务器迁移后,网站提示“502 Bad Gateway”。排查步骤:检查服务器是否正常连通。 查看Nginx错误日志。 检查PHP版本是否正确。解决方法:旧服务器上每个网站的PHP版本可能不一致,迁移到新服务器后需要手动调整PHP版本。 重新选择正确的PHP版本并保存。扫码添加技术…

ZBlog语言包切换设置和模板代码设置

后台切换语言:在后台--网站设置--网站语言中选择所需语言,后台语言会即时变化。前台语言支持:主题需支持多语言,具体步骤如下:编写语言包文件:在主题文件目录下创建language目录,并根据语言版本命名文件,如en.php、zh-cn.php、zh-tw.php。 文件内容格式示例:// zh-cn.…

深入理解多重共线性:基本原理、影响、检验与修正策略

在数据科学和机器学习领域,构建可靠且稳健的模型是进行准确预测和获得有价值见解的关键。然而当模型中的变量开始呈现出高度相关性时,就会出现一个常见但容易被忽视的问题 —— 多重共线性。多重共线性是指两个或多个预测变量之间存在强相关性,导致模型难以区分它们对目标变量的…

633. 平方数之和

给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c 。 示例 1: 输入:c = 5 输出:true 解释:1 * 1 + 2 * 2 = 5 示例 2: 输入:c = 3 输出:false 提示: 0 <= c <= 231 - 1 解题思路: 1.平方根可以用java的Math.sqrt方法 2.两个数的平方和能…

# 学期(如2024-2025-1) 学号(如:20241402) 《计算机基础与程序设计》第七周学习总结

学期(如2024-2025-1) 学号(如:20241402) 《计算机基础与程序设计》第七周学习总结 作业信息这个作业属于哪个课程 <班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个…

智谱AI Emu3环境搭建推理测试

​引子 OpenAI前首席科学家、联合创始人Ilya Sutskever曾在多个场合表达观点:只要能够非常好的预测下一个token,就能帮助人类达到通用人工智能(AGI)。虽然,下一token预测已在大语言模型领域实现了ChatGPT等突破,但是在多模态模型中的适用性仍不明确。多模态任务仍然由扩散…