素材牛VIP会员
如何防止被人刷验证码?
 贝***0  分类:SQL代码  人气:856  回帖:6  发布于6年前 收藏

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

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

讨论这个帖子(6)垃圾回帖将一律封号处理……

Lv3 码奴
记***6 JAVA开发工程师 6年前#1

如果是不同的ip和手机号,那么你就加上图形验证码把。。。

Lv5 码农
lu***ha 软件测试工程师 6年前#2

之前已经遇到过这个问题

2天时间 2万多条信息刷完了

解决办法:

1.增加图形验证码
2.判断同一ip 同一手机 在一个时间段内只能发送3条信息 (虽然不友好 )
3.判断短信发送时间 如果30分钟内 还是同一个手机和ip 就不发送

反正有很多种方法 你试一下吧

Lv5 码农
陈***康 学生 6年前#3

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

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

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

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

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

首先,正常用户除了发送验证码这个请求外,应该还会访问页面的其他资源,比如CSS/JS/HTML/图片等。

然而,如果是刷子,他可能并不会专门去访问这些个资源。

所以可以在用户访问页面的时候就记录一个human参数存在session中,每当其请求页面中的一个资源则human += 1。等到发送验证码的接口的时候,取出来这个human参数看看其值是多少,正常的一个用户这个human值应该是大于某个值的(比如5),小于的则应该就是刷子。(为0的肯定是刷子无疑)


我说的比较简单啦,更复杂点的可以顺便把几次请求之间的间隔记录下来,点击登录或注册按钮前鼠标的移动轨迹,鼠标按下收起的时间等等记录下来综合分析。

要是能引用或抄一个像google做的reCAPTCHA -- 点一下就自动识别人还是机器刷子 -- 就好了。

Lv6 码匠
天***月 职业无 6年前#4

像新狼微波那样~ 只有用户名和密码存在,才发送验证马。


问题是通过手机验证码登录这个功能肯定不能再加密码。注册的密码可以随便填,意义不大呀

@locatejoe

不是显示密码之类的方式,而是把 用户名 和 密码 都取MD5值,拼接起来,再作哈希,映射到类似bloomFilter的过滤器中。
bloomFilter返回不存在则不发送验证马。
bloomFilter占空间不大,速度也很快。

Lv6 码匠
你***饭 学生 6年前#5
  1. 增加csrf token

  2. 增加图形验证码后在发送短信验证码

  3. 增加同手机号发送短信的条数限制,如:1分钟请求次数、1天最大请求次数

行业常见的一般是第二种;第三种的限制更多是短信供应商那边;当然你也可以自己限制!

Lv7 码师
ph***16 JAVA开发工程师 6年前#6
  • 增加图形验证码,字体颜色什么的别太单一。

  • 在一次短信发送完成之后需要有间隔时间,前端cookie判断,php那边单独进行存储

  • 接口需要判断请求的ip地址和手机号,距离上次时间间隔太短不允许发送

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取