短信轰炸(SMS Pumping)是一种恶意攻击,攻击者利用自动机器人滥用您的 “发送 OTP” 接口,从而生成海量短信流量。此举通常旨在耗尽您的营销预算或为高费率号码创造收入。
为了保护您的系统,您必须实施 “深度防御” 策略,使自动化攻击变得昂贵且难以实现。
1. 多层速率限制
有效的防御需要同时在多个维度限制请求。在高并发环境中,这些限制应通过 Redis 进行管理。
单一手机号限制
- 60秒冷却时间: 在同一个手机号请求第二个验证码之前,强制执行严格的一分钟等待时间。
- 每日上限: 将单个手机号限制为每24小时最多 5 到 10 次 OTP 请求。真实用户很少会超过3次尝试;任何更多的请求都极有可能是脚本或被劫持的会话。
单一 IP 地址限制
- 每小时 IP 配额: 将单个 IP 地址限制为每小时 10-15 次请求。这能阻止单一机器人攻击多个手机号。
- 每日 IP 配额: 设置每个 IP 每天 50 次请求 的硬性限制。一旦达到该限制,该 IP 应被临时封禁 24 小时。
2. 请求前验证(“真人”检测)
绝对不要允许通过直接的 API 调用发送 OTP。在后端触发短信服务 之前,您必须验证用户是真人。
- 强制图形验证码(CAPTCHA): 在“发送 OTP”按钮激活之前,要求用户解决视觉难题(滑动条、图像选择或字母数字输入)。
- 行为分析: 实施Cloudflare Turnstile 或Google reCAPTCHA v3。这些工具会分析用户行为,并仅对看起来像自动化的请求发起挑战,从而确保真实客户的流畅体验。
3. 地理与网络情报
攻击者经常使用全球僵尸网络。限制请求来源是阻止欺诈的最有效方法之一。
地理围栏
- 运营区域白名单: 如果您的服务仅面向特定国家(例如:中国、美国或英国)的用户,请在Nginx 或防火墙 层面拦截所有来自这些区域外 IP 地址的 OTP 请求。
- IP 与前缀匹配: 验证手机号码前缀是否与 IP 位置匹配。例如,如果用户从东欧的 IP 地址为中国手机号码(+86)请求验证码,该请求应被标记或拦截。
[基于用户位置进行网络流量地理过滤的图片]
高危网络过滤
- 封禁数据中心 IP: 合法用户通过移动数据或家庭 Wi-Fi 网络进行浏览。拦截来自已知数据中心(AWS、Google Cloud、Azure 等)和 Tor 出口节点的 OTP 请求。
- 代理检测: 使用风险评分 API 拒绝来自僵尸网络经常使用的公共代理或已知 VPN 提供商的请求。
4. 架构级防护保障
监控和手动干预机制对于长期安全至关重要。
- 实时流量警报: 设置自动通知,如果您的短信量在10分钟内激增超过 200%,则触发警报。
- 紧急“终止开关”: 在管理面板中保留一个全局开关,以便在遭受攻击期间立即禁用短信提供商或强制所有用户进入**“强验证码模式”**。
- 短信提供商支出限制: 直接在您的短信网关(如 Twilio、AWS SNS 或 阿里云)设置每日和每月支出上限,以防止预算被彻底耗尽。
实施总结清单
- 手机号冷却: 两次请求间强制等待 60 秒。
- 手机号每日限制: 每个号码最多 5–10 次请求。
- IP 每小时限制: 每个 IP 最多 10–15 次请求。
- 交互式验证: 在“发送”操作前强制使用 CAPTCHA 或 Turnstile。
- IP 地理过滤: 仅允许来自您目标市场区域的请求。
- 基础设施封禁: 拒绝来自数据中心和已知代理的请求。
保持警惕,保障安全。