Rumah >pembangunan bahagian belakang >tutorial php >如何防止被人刷验证码?
坑产品设计出来的注册/登录是可以获取手机验证码的,但是却没有加上图形验证码。然后现在我们的这个获取验证码的接口被人刷了好多下。最近一个小时足足有数千次请求,而且居然还是不同的IP和不同的手机号码....
求支招,除了加图形验证码外,怎么样防刷?
坑产品设计出来的注册/登录是可以获取手机验证码的,但是却没有加上图形验证码。然后现在我们的这个获取验证码的接口被人刷了好多下。最近一个小时足足有数千次请求,而且居然还是不同的IP和不同的手机号码....
求支招,除了加图形验证码外,怎么样防刷?
我能想到的,除了图形验证码:
基于手机号码,限制每天每个手机最多发N条验证码。这个貌似LZ已经加了。
基于IP,限制每天每个IP最多发N条验证码... -- 缺点:容易误杀正常用户,慎用
【究极手段】基于用户行为大数据分析
如何基于用户行为分析呢?想到一个简单的方法:
首先,正常用户除了发送验证码这个请求外,应该还会访问页面的其他资源,比如CSS/JS/HTML/图片等。
然而,如果是刷子,他可能并不会专门去访问这些个资源。
所以可以在用户访问页面的时候就记录一个human
参数存在session
中,每当其请求页面中的一个资源则human += 1
。等到发送验证码的接口的时候,取出来这个human
参数看看其值是多少,正常的一个用户这个human
值应该是大于某个值的(比如5
),小于的则应该就是刷子。(为0
的肯定是刷子无疑)
我说的比较简单啦,更复杂点的可以顺便把几次请求之间的间隔记录下来,点击登录或注册按钮前鼠标的移动轨迹,鼠标按下收起的时间等等记录下来综合分析。
要是能引用或抄一个像google做的reCAPTCHA -- 点一下就自动识别人还是机器刷子 -- 就好了。
像新狼微波那样~ 只有用户名和密码存在,才发送验证马。
问题是通过手机验证码登录这个功能肯定不能再加密码。注册的密码可以随便填,意义不大呀
@locatejoe
不是显示密码之类的方式,而是把 用户名 和 密码 都取MD5值,拼接起来,再作哈希,映射到类似bloomFilter的过滤器中。
bloomFilter返回不存在
则不发送验证马。
bloomFilter占空间不大,速度也很快。
之前已经遇到过这个问题
2天时间 2万多条信息刷完了
解决办法:
1.增加图形验证码
2.判断同一ip 同一手机 在一个时间段内只能发送3条信息 (虽然不友好 )
3.判断短信发送时间 如果30分钟内 还是同一个手机和ip 就不发送
反正有很多种方法 你试一下吧
如果是不同的ip和手机号,那么你就加上图形验证码把。。。
增加图形验证码,字体颜色什么的别太单一。
在一次短信发送完成之后需要有间隔时间,前端cookie判断,php那边单独进行存储
接口需要判断请求的ip地址和手机号,距离上次时间间隔太短不允许发送