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

最近又遇到了用户系统注册接口被刷爆的现象,本来一天只有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并发送警报。
相关推荐
GetcharZp2 小时前
GitHub 49K+ Star!C++ 开发者必知的 JSON 神级库:从零到精通全指北
后端
xujinwei_gingko2 小时前
SpringBoot整合WebSocket
spring boot·后端·websocket
智码看视界3 小时前
现代Web开发基础:全栈工程师的起航点
前端·后端·c5全栈
程序员cxuan3 小时前
Claude Fable 5 来了
人工智能·后端·程序员
JS菌3 小时前
手写一个 AI Agent 全栈项目:从沙箱执行到子智能体的完整实现
前端·人工智能·后端
wang09073 小时前
自己动手写一个spring之IOC_2
java·后端·spring
ltl4 小时前
推理退化:为什么大模型会输出乱码、死循环和无意义文本
后端
ltl4 小时前
架构视图与文档:C4 模型从入门到实战
后端
IT_陈寒7 小时前
Redis持久化这个坑,我爬了一整天才出来
前端·人工智能·后端
无风听海7 小时前
多租户系统中的 OIDC:Discovery 端点与联合登录的深度实践
后端·python·flask