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

最近又遇到了用户系统注册接口被刷爆的现象,本来一天只有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并发送警报。
相关推荐
一灯架构3 小时前
90%的人答错!一文带你彻底搞懂ArrayList
java·后端
mldong5 小时前
Python开发者狂喜!200+课时FastAPI全栈实战合集,10大模块持续更新中🔥
后端
GreenTea5 小时前
从 Claw-Code 看 AI 驱动的大型项目开发:2 人 + 10 个自治 Agent 如何产出 48K 行 Rust 代码
前端·人工智能·后端
Moment8 小时前
AI 全栈指南:NestJs 中的 Service Provider 和 Module
前端·后端·面试
IT_陈寒8 小时前
为什么我的JavaScript异步回调总是乱序执行?
前端·人工智能·后端
Moment8 小时前
AI全栈入门指南:NestJs 中的 DTO 和数据校验
前端·后端·面试
小村儿8 小时前
Harness Engineering:为什么你用 AI 越用越累?
前端·后端·ai编程
小码哥_常8 小时前
为什么PUT和DELETE请求在大公司中逐渐被弃用?
后端
宫_商_角_徵8 小时前
动态代理到底在做什么?
后端
苍何8 小时前
我把微信 cli 开源了,群消息终于不用爬楼了!
后端