php - 如何防止被人刷验证码?

 mobiledu2502872733 发布于 2022-11-29 04:24

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

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

6 个回答
  • 我能想到的,除了图形验证码:

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

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

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

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

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

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

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


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

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

    2022-11-29 04:38 回答
  • 像新狼微波那样~只有用户名和密码存在,才发送验证马。


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

    @locatejoe

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

    2022-11-29 04:38 回答
  • 之前已经遇到过这个问题

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

    解决办法:

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

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

    2022-11-29 04:38 回答
  • 如果是不同的ip和手机号,那么你就加上图形验证码把。。。

    2022-11-29 04:38 回答
    • 增加图形验证码,字体颜色什么的别太单一。

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

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

    2022-11-29 04:38 回答
    1. 增加csrftoken

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

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

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

    2022-11-29 04:38 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有