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

最近又遇到了用户系统注册接口被刷爆的现象,本来一天只有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并发送警报。
相关推荐
用户83580861879116 分钟前
撮合引擎 OrderBook 的 100ns 之路:无锁 RingBuffer + 伪共享消除,Go 1.22 下单 op 11ns
后端
用户8818630013620 分钟前
用Node.js写一个简单的API请求日志中间件
后端
用户83580861879126 分钟前
Go 高并发下的“内存刺客“:自研 Size-Class 无锁对象池,把 sync.Pool 的 P99 从 128μs 压到 41μs
后端
货拉拉技术32 分钟前
资损下降 99.96% 的背后— AI 资损防控平台实战
后端
山水洛行3 小时前
AI Agent 智能体记忆:从检索到被治理的数据系统
后端
卷无止境3 小时前
C++20 的概念与约束:让模板编程终于"说人话"
后端
Ai拆代码的曹操3 小时前
一次排查三种连接泄漏模式,再也不怕 HikariCP 连接池爆满了
后端
咪库咪库咪3 小时前
Cypher入门
后端
雪隐4 小时前
个人电脑玩AI-08让5060 Ti给你打工——我拿 Unlimited-OCR扫了 600 页书,然后悟了
人工智能·后端