如何防止短信验证码接口被盗刷

最近又遇到了用户系统注册接口被刷爆的现象,本来一天只有20多个注册,但用户发送验证码的接口一天调用了100多万次,还好提前设置了一天最多发送100条,否则必然会造成一定的经济损失。

今天记录下这个事件,在实现涉及短信发送接口的时候,我们一定要做好安全考虑。

一. 为什么会出现短信接口盗刷现象

"短信接口盗刷"是指攻击者恶意调用你的短信发送接口,大量触发验证码、营销短信等请求,从而:

  • 消耗短信余额(直接经济损失);
  • 导致真实用户无法收到验证码;
  • 甚至被运营商封号、加入黑名单。

这种情况一般是在接口开发的时候,忽略了一些安全的限制:

  1. 不限制请求来源
  2. 没有做手机号发送限制,单位时间内发送条数限制
  3. 手机号格式限制
  4. 人机校验
  5. 泄漏调用短信服务的Key等
  6. 必要的监控和发送量提醒

二. 如何防止短信验证码盗刷

如果你的网站登录使用了手机号验证,但接口被恶意利用发送大量营销短信,可以采取以下几种措施来解决这个问题:

1. 实现速率限制 (Rate Limiting)

在你的接口上实现速率限制,确保每个手机号每分钟只能接收一定数量的短信。这样可以防止短时间内发送大量短信。

  • API侧每个手机号每分钟最多接收5条短信。

2. 使用短信服务提供商的安全功能

根据业务预估每天的发送量,限制请求频率。

3. 人机校验

人机校验是目前主流的防护措施,通过用户行为检测来保护接口

国内常用的人机校验: www.geetest.com/index

海外Google的人机校验:

cloud.google.com/security/pr...

图形验证码:效果有限

4. 限制异常来源

  1. 不允许第三方调用接口:比如增加请求来源验证
  2. 增加鉴权,不能简单的将接口请求信息暴露给用户

5. 异常检测和报警机制

实现异常检测机制,监控短信发送请求的频率和模式。如果检测到异常活动,及时报警并阻止相关请求。

  • 示例:检测到某个IP地址在短时间内请求了大量短信,立即封禁该IP并发送警报。
相关推荐
神奇小汤圆5 小时前
金三银四Java面试题及答案汇总(2026持续更新)
后端
颜酱6 小时前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
神奇小汤圆6 小时前
加了 limit 1,查询竟然变慢了?
后端
Java水解6 小时前
SpringBoot3全栈开发实战:从入门到精通的完整指南
spring boot·后端
Java水解6 小时前
Java 中间件:Dubbo 服务降级(Mock 机制)
java·后端
千寻girling6 小时前
一份不可多得的 《 Python 》语言教程
人工智能·后端·python
南风9996 小时前
Claude code安装使用保姆级教程
后端
爱泡脚的鸡腿6 小时前
Node.js 拓展
前端·后端
蚂蚁背大象7 小时前
Rust 所有权系统是为了解决什么问题
后端·rust