首页  >  文章  >  后端开发  >  如何防止被人刷验证码?

如何防止被人刷验证码?

WBOY
WBOY原创
2016-10-19 10:40:521481浏览

坑产品设计出来的注册/登录是可以获取手机验证码的,但是却没有加上图形验证码。然后现在我们的这个获取验证码的接口被人刷了好多下。最近一个小时足足有数千次请求,而且居然还是不同的IP和不同的手机号码....

求支招,除了加图形验证码外,怎么样防刷?

回复内容:

坑产品设计出来的注册/登录是可以获取手机验证码的,但是却没有加上图形验证码。然后现在我们的这个获取验证码的接口被人刷了好多下。最近一个小时足足有数千次请求,而且居然还是不同的IP和不同的手机号码....

求支招,除了加图形验证码外,怎么样防刷?

我能想到的,除了图形验证码:

  1. 基于手机号码,限制每天每个手机最多发N条验证码。这个貌似LZ已经加了。

  2. 基于IP,限制每天每个IP最多发N条验证码... -- 缺点:容易误杀正常用户,慎用

  3. 【究极手段】基于用户行为大数据分析

如何基于用户行为分析呢?想到一个简单的方法:

首先,正常用户除了发送验证码这个请求外,应该还会访问页面的其他资源,比如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地址和手机号,距离上次时间间隔太短不允许发送

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn