短信验证码防刷:从频率限制到风控策略的完整设计
先理解攻击成本:短信接口没有身份门槛,一个循环就能把余额刷空。所以防护的第一原则是「先卡住请求量,再谈识别」。
一、四层防护,从便宜到贵
| 层 | 手段 | 拦住什么 | 成本 |
|---|---|---|---|
| 1 | 图形/行为验证前置 | 脚本直刷 | 极低 |
| 2 | 手机号频控(60s / 10 次每日) | 单号轰炸 | 极低 |
| 3 | IP / 设备频控 | 单机批量 | 低 |
| 4 | 号段与行为风控 | 代理池 + 虚拟号 | 中 |
四层要同时上。只做手机号频控,攻击者换个号就绕过;只做 IP 限流,代理池一秒破。
二、频控的具体参数
同一手机号:60 秒内 1 条,24 小时 5–10 条
同一 IP:每小时 10 条,24 小时 30 条
同一设备指纹:每小时 10 条
同一号段(前 7 位):每分钟 100 条
最后一层最容易被忽略,但它拦得住「用一万个不同号码但都是同一号段」的攻击——那是虚拟号商的典型特征。
三、图形验证码放哪一步
不要一上来就弹验证码——正常用户会烦。正确做法是分级触发:
- 前 2 次请求直接放行;
- 第 3 次起要求图形验证;
- 触发风控后改为「滑动 + 点选」双验证;
- 仍异常则直接拒绝并记录。
这个设计让 95% 的正常用户体验不到验证码,而攻击者的成本翻十倍。
四、号段与虚拟号识别
三类可疑号码:
- 虚拟运营商号段(170/171 等):不拒绝,但降低配额;
- 号码段集中:同一前 7 位短时间内大量请求;
- 号码格式异常:不合规的号码直接拒,不要浪费短信费。
五、服务商侧的兜底
自己做得再好,也要在服务商那边设一层:
- 日发送量上限:超过自动告警,避免一夜刷空;
- 单号码日上限:服务商层面通常可配;
- 发送速率上限:防止瞬间并发打满通道;
- 余额告警:余额低于阈值推送到手机。
这四条是最后的保险,设置成本几分钟,能挡住大部分灾难。
六、被刷之后怎么止损
1. 立刻关闭短信发送开关(业务侧降级为图形验证)
2. 服务商后台封禁异常号段
3. 查日志定位来源 IP、UA、时间规律
4. 补上缺失的那一层防护,再逐步放开
第一条最重要——很多人边查边放行,账单继续涨。
七、一个反直觉的建议
不要在验证码短信里放任何可以「验证成功」的信息。有人会把接口返回的验证码直接写进日志或返回体,被刷的时候等于免费送验证码。
短信内容只放验证码和使用场景,不放订单号、金额、用户信息。
接口接入的基础流程见 新做的网站如何接入验证码短信;发送失败排查见 验证码短信发送失败都有哪些原因。
相关阅读
版权声明:如无特殊标注,文章均为本站原创,转载时请以链接形式注明文章出处。








评论