防止短信接口被盗用
短信发送接口一旦被未授权调用,或 API Key 泄露后被他人使用,会出现短信被大量发出、账户余额被快速消耗、通道信誉下降等问题。EngageLab SMS 可以限制发送侧的频率、用量和国家 / 地区范围,但无法替代你对密钥和业务发送入口的保护。
本文说明如何把平台能力与业务侧防护配合使用,降低接口被盗用的风险。
正确架构
EngageLab SMS API 只能由你的业务系统服务端调用,不能由浏览器、App 客户端或小程序直接请求。
业务系统服务端 → EngageLab SMS API(携带 API Key;页面触发的发送再传入 end_user_ip)
业务系统服务端 → EngageLab SMS API(携带 API Key;页面触发的发送再传入 end_user_ip)
此代码块在浮窗中显示
dev_key与dev_secret只存放在服务端,不要写入前端代码、App 安装包、公开仓库或 CI 明文变量。- 不要把 SMS API 地址和密钥暴露给终端用户可直接访问的接口。
- 建议为生产环境 API Key 配置调用方 IP 白名单,详见 API Key。
两种 IP 不要混用
| 配置 / 参数 | 填写的是 | 挡住什么 |
|---|---|---|
| API Key 的 IP 白名单 | 你的服务器出口 IP | 陌生 IP 拿着 Key 直接调用 SMS API |
发送请求中的 end_user_ip |
终端用户的 IP | 同一用户 IP 在短时间内反复触发发送 |
在 安全中心 启用「按 IP 地址」频控后,必须在 发送短信 请求中传入 end_user_ip,该限制才会生效。这里应传用户设备的公网 IP,而不是你服务器的 IP。服务端批量发送营销或通知短信时,如果没有终端用户 IP,按 IP 频控不会对该次请求生效,更应依赖 API Key 白名单和发送量限额。
平台侧防护
在 SMS 控制台完成以下配置,用于限制接口被盗用后的损失:
| 你要做的 | 在哪配置 | 作用 |
|---|---|---|
| 为 API Key 设置 IP 白名单、有效期,并确保可随时禁用 | API Key | 限制谁能调用接口,泄露后能立刻停用 |
| 开启同号码、同 IP 的发送频率限制 | 安全中心 | 拦截单号、单 IP 连打 |
在由页面触发的发送请求中传入 end_user_ip |
发送短信 | 让按 IP 频控生效 |
| 设置日 / 月发送量预警值与限额值 | 安全中心 | 用量异常时告警或自动暂停 |
| 按国家 / 地区设置白名单或黑名单 | 安全中心 | 避免向非业务地区发送 |
| 发生紧急情况时一键暂停 SMS 通道 | 安全中心 | 正在被盗用时快速止损 |
| 配置余额不足告警 | 告警设置 | 费用异常时尽早发现 |
发送量预警或限额触发后如需收到通知,请先在 Webhook 中配置相应回调事件。
按模板类型加强防护
不同 模板类型 的被盗用方式不同,防护重点也不一样。
通知 / 营销模板
这类短信通常由服务端按业务事件或运营计划批量发送,主要风险是密钥泄露后被他人拿去群发。
- 生产环境必须配置 API Key IP 白名单。
- 为应用设置合理的日 / 月发送量限额,避免余额被一次性打光。
- 定时或批量任务只在受控的服务端环境触发,不要把发送能力开放成无鉴权 HTTP 接口。
验证码模板
如果你使用验证码类型模板,由网站或 App 上的「获取短信」按钮触发发送,还需要在你自己的业务接口上做防护:
- 发信前做人机验证(如图形验证码或 Turnstile / reCAPTCHA),并在服务端校验结果。
- 同一手机号设置重发间隔(例如 60 秒),前端同步展示倒计时。
- 按账号、设备、IP 分别限制分钟、小时、自然日的请求上限,失败请求也计入次数。
- 「获取短信」必须带有登录态,或未登录场景下的有效会话,禁止无上下文的公开发送入口。
把错误码当作异常信号
发送短信 在校验或发送阶段可能返回以下与频率相关的错误。出现这些错误时,应减缓重试,并检查是否存在未授权调用或集中请求:
| 错误码 | 含义 |
|---|---|
3004 |
超出频率限制,同一模板、同一目标用户在限制窗口内无法再次下发 |
10006 |
超出频率限制 |
如果发送量已达安全中心限额,或你已执行紧急止损,后续请求会被拒绝。请先在安全中心确认当前状态,不要立即连续重试。
密钥泄露时怎么做
- 在 SMS 控制台 禁用或轮换 API Key。
- 在 安全中心 使用紧急止损,暂停短信发送。
- 在 消息明细 和回调中核对异常发送。
- 查看 告警设置 是否已触发余额告警,并核对近期消耗。
- 收紧 API Key IP 白名单,并检查日 / 月发送量限额是否合理。
- 确认风险消除后再恢复发送。
上线检查清单
- API 只在服务端调用,
dev_secret未进入前端、App、公开仓库或 CI 明文变量。 - 生产环境 API Key 已配置服务器出口 IP 白名单。
- 安全中心已开启号码频控;由页面触发的发送已传入
end_user_ip。 - 已设置日 / 月发送量限额,并配置了用量相关回调和余额告警。
- 验证码类发送在调用 EngageLab 前已做人机验证和业务频控。
- 已明确被盗用时的处置顺序:禁用 Key → 紧急止损 → 核查发送记录。










