一次防刷攻击事件的处理记录
问题
一个非理性的需求:在不使用短信验证的情况下凭手机号码赠送电子券码
Day 1
使用IP防止用户刷接口获取电子券码
思路:
记录每次访问日志,业务处理前先查询IP访问次数,超过3次视为攻击,返回出错信息
结果:
上线半天就被刷子盯上,5000个码瞬间被刷完,后台记录是不同的IP,看来刷子的技术水平还可以,懂得用伪造IP刷接口
卒
Day 2
使用极验强制用户先完成智能验证
思路:
IP不保险,只能上验证了,也可以用图片验证码,考虑到用户体验,还是去试用了一下极验的产品
而且使用微信OPENID作为UserID,看起来很牢固了,用户只能在微信浏览器环境下操作
结果:
上线后看起来正常,到晚上又被刷子破解,使用有效的验证过的验证码重复刷接口,5000个码瞬间被刷完,后台记录是相同的相同的OPENID,看来不是刷子的技术水平可以,是我的水平不行
卒
Day 3
绑定微信OPENID和获取的手机号
思路:
一个OPENID只能用来对应一个手机号码,一个手机号码只能取一个码,这样变相建立了用户体系
结果:
暂时刷子还没有找到办法,从技术上应该比较完美了
卒
Day 4
再次验证微信OPENID是否匹配
思路:
刷子用伪造的OPENID,破解了极验的算法,直接来刷接口了,而我居然还是想偷懒,没有二次验证微信OPENID
结果:
结果还不敢说
证明极验不靠谱
心得
- 道高一尺,魔高十尺
- 一定要做小范围测试,一定要记录日志,一定要自己攻击测试(说说而已,那有时间)
- 在技术上偷懒,只会让自己变得更忙
- 技术储备要跟上,构建一个商业项目,有些底层的东西是跑不掉,总有一天你会用上