Logo Site EngageLab Mark Colored Transparent文档
搜索

防止验证码接口被刷

验证码下发一旦被脚本连打,会出现用户手机被大量无关验证码打扰、账户余额被快速消耗、通道信誉下降等问题。EngageLab OTP 可以限制发送侧的频率和用量,但拦不住你业务上那个未鉴权的「获取验证码」接口。

本文说明如何把平台能力与业务侧防护配合使用,降低接口被刷的风险。

正确架构

EngageLab OTP API 只能由你的服务端调用,不能由浏览器、App 客户端或小程序直接请求。

用户 → 你的前端(登录 / 注册 / 重置密码页) → 你的后端(校验会话、人机验证、业务频控) → EngageLab OTP API(携带 API Key,并传入 end_user_ip)
              
              用户 → 你的前端(登录 / 注册 / 重置密码页)
     → 你的后端(校验会话、人机验证、业务频控)
     → EngageLab OTP API(携带 API Key,并传入 end_user_ip)

            
此代码块在浮窗中显示
  • dev_keydev_secret 只存放在服务端,不要写入前端代码、App 安装包或公开仓库。
  • 前端只调用你自己的「获取验证码」接口,不要直连 https://otp.api.engagelab.cc
  • 建议为生产环境 API Key 配置调用方 IP 白名单,详见 API Key

两种 IP 不要混用

配置 / 参数 填写的是 挡住什么
API Key 的 IP 白名单 你的服务器出口 IP 陌生 IP 拿着 Key 直接调用 OTP API
发送请求中的 end_user_ip 终端用户的 IP 同一用户 IP 在短时间内反复请求验证码

安全中心 启用「按 IP 地址」频控后,必须在 验证码下发 请求中传入 end_user_ip,该限制才会生效。这里应传用户设备的公网 IP,而不是你服务器的 IP。

平台侧防护

在 OTP 控制台完成以下配置,用于限制发送侧被刷后的损失:

你要做的 在哪配置 作用
为 API Key 设置 IP 白名单、有效期,并确保可随时禁用 API Key 限制谁能调用接口,泄露后能立刻停用
开启同号码、同 IP 的发送频率限制 安全中心 拦截单号、单 IP 连打
在发送请求中传入 end_user_ip 验证码下发 让按 IP 频控生效
设置日 / 月发送量预警值与限额值 安全中心 用量异常时告警或自动暂停
按国家 / 地区设置白名单或黑名单 安全中心 避免向非业务地区发送
发生紧急情况时一键暂停 SMS 通道 安全中心 正在被刷时快速止损

发送量预警或限额触发后如需收到通知,请先在 Webhook 中配置相应回调事件。

业务侧防护

平台频控无法替代你自己的「获取验证码」接口防护。建议在调用 EngageLab 之前完成这些校验:

  • 发码前做人机验证(如图形验证码或 Turnstile / reCAPTCHA),并在服务端校验结果。
  • 同一手机号设置重发间隔(例如 60 秒),前端同步展示倒计时。
  • 按账号、设备、IP 分别限制分钟、小时、自然日的请求上限,失败请求也计入次数。
  • 「获取验证码」必须带有登录态,或未登录场景下的有效会话,禁止无上下文的公开发码入口。
  • 限制同一验证码的尝试次数;校验成功后立即失效。EngageLab OTP 对已验证成功的验证码不支持再次校验。

把错误码当作被刷信号

验证码下发 在发送前校验阶段可能返回以下错误。出现这些错误时,应减缓重试,并检查是否遭到集中请求:

错误码 HTTP 状态码 含义
3004 400 同一模板、同一目标用户超出频率限制,限制窗口以模板配置为准
6001 429 同一手机号发送频率超过限制,窗口可能为分钟、小时或自然日
6002 429 同一终端用户 IP 发送频率超过限制;仅在请求传入 end_user_ip 时检查
6003 429 应用全局日发送量或月发送量达到上限
6007 403 短信验证码发送服务已暂停,可能是全部或当前国家 / 地区被暂停

收到 HTTP 429 时,请勿立即连续重试。如持续出现,请先在安全中心查看是否已触发送量限额或紧急止损,再联系技术支持。

密钥泄露时怎么做

  1. 在 OTP 控制台 禁用或轮换 API Key
  2. 安全中心 使用紧急止损,暂停 SMS 发送。
  3. 历史记录 和回调中核对异常发送。
  4. 收紧 API Key IP 白名单,并检查日 / 月发送量限额是否合理。
  5. 确认风险消除后再恢复发送。

上线检查清单

  • API 只在服务端调用,dev_secret 未进入前端、App 或公开仓库。
  • 生产环境 API Key 已配置服务器出口 IP 白名单。
  • 安全中心已开启号码频控;需要按 IP 限制时,发送请求已传入 end_user_ip
  • 已设置日 / 月发送量限额,并配置了用量相关回调。
  • 「获取验证码」接口在调用 EngageLab 前已做人机验证和业务频控。
  • 已明确被刷时的处置顺序:禁用 Key → 紧急止损 → 核查发送记录。
Icon Solid Transparent White Qiyu
联系销售