最近又遇到了用户系统注册接口被刷爆的现象,本来一天只有20多个注册,但用户发送验证码的接口一天调用了100多万次,还好提前设置了一天最多发送100条,否则必然会造成一定的经济损失。
今天记录下这个事件,在实现涉及短信发送接口的时候,我们一定要做好安全考虑。
一. 为什么会出现短信接口盗刷现象
"短信接口盗刷"是指攻击者恶意调用你的短信发送接口,大量触发验证码、营销短信等请求,从而:
- 消耗短信余额(直接经济损失);
- 导致真实用户无法收到验证码;
- 甚至被运营商封号、加入黑名单。
这种情况一般是在接口开发的时候,忽略了一些安全的限制:
- 不限制请求来源
- 没有做手机号发送限制,单位时间内发送条数限制
- 手机号格式限制
- 人机校验
- 泄漏调用短信服务的Key等
- 必要的监控和发送量提醒
二. 如何防止短信验证码盗刷
如果你的网站登录使用了手机号验证,但接口被恶意利用发送大量营销短信,可以采取以下几种措施来解决这个问题:
1. 实现速率限制 (Rate Limiting)
在你的接口上实现速率限制,确保每个手机号每分钟只能接收一定数量的短信。这样可以防止短时间内发送大量短信。
- API侧每个手机号每分钟最多接收5条短信。
2. 使用短信服务提供商的安全功能
根据业务预估每天的发送量,限制请求频率。
3. 人机校验
人机校验是目前主流的防护措施,通过用户行为检测来保护接口

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

cloud.google.com/security/pr...
图形验证码:效果有限
4. 限制异常来源
- 不允许第三方调用接口:比如增加请求来源验证
- 增加鉴权,不能简单的将接口请求信息暴露给用户
5. 异常检测和报警机制
实现异常检测机制,监控短信发送请求的频率和模式。如果检测到异常活动,及时报警并阻止相关请求。
- 示例:检测到某个IP地址在短时间内请求了大量短信,立即封禁该IP并发送警报。