敏捷短信风控方案
2025/8/1 · 6 min read
短信风控防御方案
背景
7 月 25 日起出现 15 个国区高频无效短信请求,导致短信费用激增。
每月短信条数
7月每日短信条数
7月短信登录成功率(分国家)


攻击者使用的手机号码大部分都是重复的
7月新增登录方式
7第三方登录成功率



邮箱登录成功率

需求说明
1. 一次性票据签名
目标:防止短信接口被刷 交互时序
sequenceDiagram
客户端 ->> 签名服务: ① 请求票据
签名服务 -->> 客户端: ② 返回票据 {时间戳, 随机数, 服务器签名}
客户端 ->> 短信服务: ③ POST /sms/send(票据 + 指纹 + 手机号)
短信服务 ->> 短信服务: ④ 校验票据
2. 短信频控&图形验证
目标:当接口被刷后,限制短信请求条数
单位时间
上限
发送量超过 ≥ 80 %
≥ 100 %
国家-每天
配额 × 动态系数
图形验证
拒绝
国家-每小时
配额 × 动态系数
图形验证
拒绝
设备-日
3条
图形验证(第2条请求时触发)
拒绝
IP-10分钟
5 条
图形验证(第2条请求时触发)
拒绝
初始配额 动态系数计算规则
计算登录成功率
统计最近1小时内,短信验证码发送总数(S)和用验证码成功登录的次数(L)。
成功率 R = L / S。
调整短信上限
- 如果 R ≥ 55%,短信上限 × 1.2(放宽20%)。 最多不能超过当日(当前每小时)上限的1.5倍
- 如果 20% ≤ R < 50%,短信上限不变。
- 如果 R < 20%,短信上限 × 0.7(收紧30%)。
3. 黑名单策略
监控指标(同一手机号 / 设备 / IP)
观测窗口
触发阈值
短信请求 ≥ 5 且 登录成功 ≤ 1
1天
满足即拉黑
图片验证码连续失败 ≥ 3 次
30 分钟
满足即拉黑
- 首次拉黑:24小时内无法接收短信
- 2次拉黑:72小时内无法接收短信
- 3次拉黑:永久限制接收短信
需要上报的设备指纹信息
端
必采字段
全部一致时(强标识)
处理方式
部分一致时(弱标识)
处理方式
iOS
型号、系统、分辨率、语言/时区、IDFV、App 版本
型号、系统、分辨率、语言/时区、IDFV、App 版本
直接惩罚
型号、系统、分辨率一致,IDFV不同或为空
图形验证,验证失败直接惩罚
Android
品牌/型号、系统、AndroidID、分辨率、语言/时区、App 版本、OAID
品牌/型号、系统、分辨率、语言/时区、AndroidID、OAID、App 版本
直接惩罚
品牌/型号、系统一致,AndroidID或OAID仅有一个相同
图形验证,验证失败直接惩罚
H5 / Web
UA、Canvas/WebGL/Audio Hash、语言/时区、LocalStorage
UA、Canvas/WebGL/Audio Hash、语言/时区、LocalStorage
直接惩罚
UA、语言/时区一致,Canvas/WebGL/Audio Hash不同
图形验证,验证失败直接惩罚
PC
UA、Canvas/WebGL Hash、语言/时区、分辨率、LocalStorage
UA、Canvas/WebGL Hash、语言/时区、分辨率、LocalStorage
直接封禁
UA、分辨率一致,Canvas/WebGL Hash不同
图形验证码
4. 产品层面弱化短信验证登录
- 引导第三方登录,弱化手机号登录
- 手机号注册后,引导添加密码。手机号登录,默认密码登录。