图形验证码的主要作用是什么?
防止暴力破解
图形验证码有什么缺点?
需要用户思考,并手动填写图片中的内容
有没有不需要用户思考的验证方案?
有,滑动验证
滑动验证容易实现吗?
容易,接入第三方平台就能轻松实现,安全性还很高
第三方滑动验证平台有缺点吗?
有,当然有。
缺点是什么?
我没有什么他就要什么。我没钱,他跟我要钱,我没有外网,他跟我要外网。
为什么不自己开发一个滑动验证登录模块呢?
滑动验证需要大数据和AI支持,我没有能力,条件也不允许。但是开发一个在一定程度上可以防止暴力破解的滑动验证功能还是可行的。
来说说你的思路?
主要原理是降低登录验证的频率
就这?
是的,不过后期可以加入缓存,记录用户登录时使用的多级IP、用户名、时间戳,以此来判断是否恶意登录。
先来一张简单的登录流程图
- 第一步,用户填充用户名和密码,请求登录
- 第二步,服务器判断请求是否携带令牌
- 第三步,如果未携带令牌,则生成一个包含请求信息和当前时间戳的令牌,可以是加密的,也可以是未加密但不能伪造的令牌
- 第四步,将令牌返回给客户端
- 第五步,客户端显示一个滑动条(为了确保携带令牌请求登录时,令牌已生效,可以延时一秒显示,或延时一秒可滑动),提示用户滑动到最右端
- 第六步,用户滑动到最右端后,客户端携带令牌和用户名密码一起发送到服务器
- 第七步,服务器解开令牌,与请求携带的用户名密码比较是否相同,并且令牌在生效时间段内(生效时间段由服务端规定)
- 第八步,如果请求携带的用户名密码与令牌中的不一致或令牌无效,则返回失败信息
- 第九步,如果请求携带的用户名密码与令牌中的一致且令牌有效,则去数据库验证登录
- 第十步,将验证结果返回给客户端
- 第十一步,客户端根据返回的结果,做出登录成功的动作或登录失败的动作
这么做的结果就是登录一次至少需要几秒钟。不过基本满足内网登录的要求了。