图形验证码最佳实践

简介:

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)如果不需要校验,且没有传入图形验证码,则不校验

 

是否需要图形验证码这个信息应该记在什么地方

项目中出现一个问题:

在登录界面,连续三次登录失败,就会出现图形验证码,但是刷新页面之后,却没有出现图形验证码.

解决方案:

可以增加一个接口,返回是否需要校验图形验证码.

 

 另外一种设计:过多长时间之后不再出现图形验证码

即,设置校验图形验证码的有效期(区别于图形验证码的有效期)

相关文章
|
9月前
|
机器学习/深度学习 数据采集 API
Python自动化解决滑块验证码的最佳实践
Python自动化解决滑块验证码的最佳实践
|
前端开发 安全 Java
SpringBoot 实现登录验证码(附集成SpringSecurity)
SpringBoot 实现登录验证码(附集成SpringSecurity)
902 0
|
存储 NoSQL 数据库
认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】
这篇文章讲述了在分布式微服务系统中添加用户注册和登录功能的过程,重点介绍了用户注册时通过远程服务调用第三方服务获取短信验证码、使用Redis进行验证码校验、对密码进行MD5加密后存储到数据库,以及用户登录时的远程服务调用和密码匹配校验的实现细节。
认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】
|
11月前
|
缓存 Java 应用服务中间件
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
2352 5
|
资源调度 JavaScript API
nest.js + sms 实现短信验证码登录
本文介绍了在Nest.js框架中集成短信验证码登录的实现方案,详细阐述了使用阿里云短信服务的配置流程、资质申请、短信模板设置,并提供了API调用示例和工程代码的运行步骤。
nest.js + sms 实现短信验证码登录
|
C#
C# 图形验证码实现登录校验代码
C# 图形验证码实现登录校验代码
361 2
|
Java
Java 登录输入的验证码
Java 登录输入的验证码
180 1
|
存储 JSON 前端开发
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
本文介绍了在Node.js中使用token实现前端验证码和登录功能的详细流程,包括生成验证码、账号密码验证以及token验证和过期处理。
514 0
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
【Azure 环境】中国区Azure B2C 是否支持手机验证码登录呢?
【Azure 环境】中国区Azure B2C 是否支持手机验证码登录呢?
154 0
|
缓存 算法 NoSQL
短信验证码登录接口,如何防止恶意攻击
该文讨论了移动应用中常见的手机短信验证码登录(短验登录)的安全设计。后端通常需要提供获取短信验证码和手机短验登录两个API。为了增强机短验登录API的安全性,提出了几种无需依赖Redis等存储介质的方案:1)使用数字签名确保请求合法性;2)基于时间戳的验证,允许在一定时间范围内有效;3)应用TOTP算法生成动态码进行验证;4)利用JWTToken进行身份验证并设置有效期。文章强调了创新思考在解决安全问题中的重要性,并鼓励读者分享更多方案。
1220 1