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

最近又遇到了用户系统注册接口被刷爆的现象,本来一天只有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 分钟前
Node.js 编程实战:路由与中间件
前端·后端·node.js
程序员爱钓鱼6 分钟前
Node.js 编程实战:Express 基础
前端·后端·node.js
CosMr7 分钟前
【QT】【FFmpeg】 Qt 中FFmpeg环境搭建以及D__STDC_FORMAT_MACROS、PRId64解答
后端
Knight_AL19 分钟前
Spring Boot 的主要特性与传统 Spring 项目的区别
spring boot·后端·spring
回家路上绕了弯24 分钟前
一文读懂分布式事务:核心原理、解决方案与实践思考
分布式·后端
踏浪无痕31 分钟前
JobFlow 背后:五个让我豁然开朗的设计瞬间
分布式·后端·架构
黄俊懿41 分钟前
【深入理解SpringCloud微服务】Gateway简介与模拟Gateway手写一个微服务网关
spring boot·后端·spring·spring cloud·微服务·gateway·架构师
用户2190326527351 小时前
别再到处try-catch了!SpringBoot全局异常处理这样设计
java·spring boot·后端
梁同学与Android1 小时前
Android ---【经验篇】阿里云 CentOS 服务器环境搭建 + SpringBoot项目部署(二)
android·spring boot·后端