monkeyWie / monkeywie.github.io

Hexo blog
4 stars 3 forks source link

2020/03/26/stateless-captcha/ #6

Open utterances-bot opened 3 years ago

utterances-bot commented 3 years ago

设计一种无状态的验证码 | MonkeyWie's Blog

背景通常验证码都是通过session来实现,在服务端生成一个随机字符串作为验证码,将该字符串存到session中,然后将验证码图片渲染到前端,前端提交之后通过session中存放的正确验证码进行对比从而验证输入的正确性。上面是一个典型的验证码实现的流程,但是这种

https://monkeywie.cn/2020/03/26/stateless-captcha/

yejia414 commented 3 years ago

验证码不用token负载,token与验证码的对应关系在服务端保存,如果是分布式可以放到共享的缓存中间件,比如放到统一的redis里,这样是不是更安全?

monkeyWie commented 3 years ago

@yejia414 可以这样做,但是就变成有状态

njxuyufeng commented 2 years ago

前端验证图形验证码不是目标; 目标是后端要验证某个用户帐号是不是在黑客攻击, 那验证信息里面要携带这个帐号的信息,这样就能锁定每次验证的人,可以做防攻击管理动作。 1、约定登录,必须先那帐号去获取token, 后台可以根据该用户的风险阀值控制返回token是不需要验证码,还是需要 2、前端拿到token,发现是缺省约定不需要验证码的,就不弹出来提示用户输入 2.1、前端拿到token,发现不是缺省的。就弹出验证码,提示用户输入了,才能login 3、后端拿着token分析,如果该用户确实还没黑客攻击行为,就走正常login流程 3.1、后端对某个账户登录失败次数做统计,超过三次,就放入风险控制区 3.2、后端判断某个账户处于风险,登录信息里又没有token,或者是缺省token,就拒绝走login流程 3.3、后端分析某个账户处于风险,且token和验证码都带过来了,验证通过后,走login流程。