3次失败之后会要求输入图形验证码
打开两个标签页,都是在有图形验证码的情况下.
第一个标签页成功,第二个标签页输入错误的图形验证码也能通过
为什么?
因为只要操作成功,就不需要校验图形验证码.
今天想设计一个图形验证码的最佳实践
(1) 首先,要明确图形验证码的目的是什么
图形验证码的目的是:防止自动化攻击.
防止暴力破解密码
12306 为什么搞那么复杂的验证码,就是为了防止机器刷票,同时保证是人在操作.
下面是百度"知道"的回答:
图形验证码是验证码的一种。验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。
(2)自动化攻击会有什么后果
(a)增加服务器负担
比如攻击登录接口,导致真正需要登录的用户登录不了.
(b)垃圾数据
因为是机器自动化操作的,不是真正的用户.所以这些数据么有用
(c)消耗资源
比如发送短信是收费的,如果机器自动化攻击,就会浪费短信资源
(3)自动化攻击的目的
(a)增加服务器负担,搞垮服务器
(b)破解登录密码(使用不同的密码不断尝试登录)
(4)图形验证码解决如下问题:
(a)减轻服务器负担
(b)减少垃圾数据
(c)节约资源(防止乱发短信)
(d)防止暴力破解
(e)揪出使用外挂的用户
(5)哪些接口需要图形验证码
增,改的接口:比如注册
鉴权相关的:比如登录,找回密码
(6)哪些场景需要图形验证码
(a)失败次数过多
比如登录3次,都失败,就可以怀疑是暴力破解
(b)使用有限资源过多
比如注册时,发送了3次短信验证码
(7)使用图形验证码的原则
不能严重影响正常用户的使用
注意:图形验证码是为了防坏人的.它会对正常用户的使用造成不方便,但是应该尽量减少对正常用户的影响.
(8)图形验证码与什么挂钩(绑定)
(a)ip
(b)浏览器cookie (咱们用的就是cookie)
(c)手机号
(9)详细设计
拿登录举例,连续三次登录失败,则显示图形验证码
第四次登录时就必须输入图形验证码了.
后台的校验规则(优先级由高到低):
(1)判断是否需要校验图形验证码,如果需要校验,则首先校验图形验证码
(2)只要传入了图形验证码并且服务器端图形验证码不为空,则校验
(3)如果不需要校验,且没有传入图形验证码,则不校验
是否需要图形验证码这个信息应该记在什么地方
项目中出现一个问题:
在登录界面,连续三次登录失败,就会出现图形验证码,但是刷新页面之后,却没有出现图形验证码.
解决方案:
可以增加一个接口,返回是否需要校验图形验证码.
另外一种设计:过多长时间之后不再出现图形验证码
即,设置校验图形验证码的有效期(区别于图形验证码的有效期)