首页 > 其他分享 >设计登陆验证码的逻辑

设计登陆验证码的逻辑

时间:2024-11-04 10:08:17浏览次数:1  
标签:逻辑 uuid url 验证码 生成 限流 登陆 id

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

设计登陆验证码的时候有个重要的点就是接口防刷与唯一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 {
    @Override
    public String generate(String prefix) {
        String uuid = UUID.randomUUID().toString();
        return prefix + uuid.replaceAll("-", "");
    }
}

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

 

标签:逻辑,uuid,url,验证码,生成,限流,登陆,id
From: https://www.cnblogs.com/azwz/p/18524600

相关文章

  • 影刀RPA实战:识别简单计算验证码
    1.官方计算验证码基于影刀AI引擎的验证码识别指令,该指令不是长期免费,有一定的免费额度,用完之后需要我们到影刀官方充值。上图使我们要识别的计算验证码影刀指令代码:配置我们选择计算题,文件路径本次指定本地图片,实际中使用网页截图保存图片地址实现演示:计算结果166......
  • 后端java——如何为你的网页设置一个验证码
    本文通过HUTOOL实现:Hutool参考文档Hutool,Java工具集https://hutool.cn/docs/#/1、工具的准备如果我们通过hutool来实现这个功能,我们需要提前安装hutool的jar包。下载地址:CentralRepository:cn/hutool/hutool-all/5.8.16 将下载好的jar包放到eclipse的lib目录,我们proje......
  • DAY75WEB 攻防-验证码安全篇&接口滥用&识别插件&复用绕过&宏命令填入&滑块类
    知识点:1、验证码简单机制-验证码过于简单可爆破2、验证码重复使用-验证码验证机制可绕过3、验证码智能识别-验证码图形码被可识别4、验证码接口调用-验证码触发接口可枚举图片验证码-识别插件-登录爆破&接口枚举验证码识别绕过等技术适用于:口令存在爆破,接口枚举调用,任意......
  • 一招帮你搞定验证码设置
    目录一、准备环境​编辑 二、配置环境三、基础方法四、验证码的一些常用类别1.LineCaptcha线段干扰的验证码(Java)2.CircleCaptcha圆圈干扰的验证码(Java)3.ShearCaptcha扭曲干扰验证码4.写出到浏览器输出5.自定义验证码CodeGenerator 五、通过实例来简述过程1.一个......
  • 一文分析:软件测试的底层逻辑是什么?
    软件测试的底层逻辑主要基于质量保证和风险控制,下面从几个关键角度来详细阐述:1.验证与确认验证(Verification):这是确保软件产品的构建过程正确的活动。它主要关注软件是否按照预先定义的规范、标准和流程进行开发。例如,在软件开发过程中,开发团队需要遵循一定的代码规范,如命名规......
  • SpringBoot实现验证码案例
    目录实现逻辑前后端交互接口前端代码后端代码实现逻辑1、后端功能:随机生成验证码图片,并把交给前端、接收用户输入,验证用户输入的验证码是否正确、2、前端功能:显示验证码,提供输入框供用户输入他们看到的验证码,把用户输入的数据交给后端,接收后端返回的验证结果前后......
  • 自动化测试中的验证码处理
    在自动化测试中,处理验证码往往是一个挑战,尤其是图形验证码。每次刷新生成的验证码内容各不相同。获取验证码的方法通常有两种:获取验证码图片链接:例如src="http://example.com/getcaptcha/123",但这种方法有时并不可靠,因为通过链接访问的验证码可能与当前页面显示的验证码不一致。......
  • 验证码处理在自动化测试中的应用
    在进行自动化测试时,处理验证码是一项常见的挑战,特别是图形验证码。每次刷新都会生成新的验证码,因此我们可以采用以下两种方法来获取验证码:获取验证码图片链接:例如src="http://example.com/getcaptcha/123",但这种方式并不总是可靠,因为通过链接访问的验证码可能与当前页面显示的不......
  • 一个人的底层逻辑,就是他的命运
    作家粥左罗说:“一个人的底层逻辑有多强大,那么他的能力就有多强,成就就有多大。”有些人捉摸不透社会的规则,摸爬滚打了大半辈子,也仍然困于底层。有一些人却能一眼看透本质,该如何做人,该怎么行事,心底都门清,自然能拿到想要的结果。见微以知萌,见端以知末。我们也可以从一个人......
  • 虚拟机扩容ubuntu22.04磁盘空间到逻辑卷中。
    在现有磁盘基础上直接扩容的。一开始部署的时候,设置的是40GB。现在已经使用30多GB了。需要扩容下。打开虚拟机设置把磁盘扩展到一定大小root@branch-dev:~#df-hFilesystemSizeUsedAvailUse%Mountedontmpfs3.2G2.2M......