加载中

Robin

敏捷短信风控方案

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. 计算登录成功率

  • 统计最近1小时内,短信验证码发送总数(S)和用验证码成功登录的次数(L)。

  • 成功率 R = L / S。

  1. 调整短信上限

  • 如果 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. 产品层面弱化短信验证登录

  1. 引导第三方登录,弱化手机号登录
  2. 手机号注册后,引导添加密码。手机号登录,默认密码登录。

相关文章