背景
前几天项目上需要对一个正常登陆接口,以及忘记密码的接口进行防爆破处理,这里我用nginx,redis,以及前端的一些简单的图形拖动来做一个简单的安全机制,可能有不完善的地方,大家可以提出来意见。
技术分析
其实一个接口是无法完全避免接口爆破的,区分人和机器或许可以使用谷歌的图片验证机制,但是我们一般简单项目没必要做那么复杂的,只需要确保不正常的访问频率不会爆破出我们的用户信息,以及让我们机器的处理流量保存在可控范围即可。
实现的效果有下面这几点:
- 验证码只能60s获取一次 并且3小时内只能获取三次,超过次数提升获取频繁,稍后再试。
- 正常登录1小时内失败6次账号自动锁定,1小时之后自动解锁。
- 获取验证码无论输入的账号存在不存在均显示发送成功,但是实际不存在的账号不会正常发送。
4.登录失败,账号不存在密码错误不再提示账号不存在等等,而是统一显示账号或密码错误。5.忘记密码前端部分增加滑动校验,60倒计时无法点击发送验证码。前后端共同校验。6.技术限制系统此接口的访问频率。
前端部分
前端部分可以在这个地址看看这几个简单的组件,这次我们就使用最简单的,滑动拖动即可。
<drag-verify
ref="dragVerify"
:width="width"
:height="height"
text="请按住滑块拖动"
successText="验证通过"
:isPassing.sync="isPassing"
background="#ccc"
completedBg="rgb(105, 231, 251)"
handlerIcon="el-icon-d-arrow-right"
successIcon="el-icon-circle-check"
@passcallback="passcallback"
>
</drag-verify