防止驗證碼介面被刷
驗證碼下發一旦被腳本連打,會出現使用者手機被大量無關驗證碼打擾、帳戶餘額被快速消耗、通道信譽下降等問題。EngageLab OTP 可以限制發送側的頻率和用量,但攔不住你業務上那個未鑑權的「取得驗證碼」介面。
本文說明如何把平台能力與業務側防護配合使用,降低介面被刷的風險。
正確架構
EngageLab OTP API 只能由你的伺服器端呼叫,不能由瀏覽器、App 用戶端或小程式直接請求。
使用者 → 你的前端(登入 / 註冊 / 重設密碼頁)
→ 你的後端(校驗工作階段、人機驗證、業務頻控)
→ EngageLab OTP API(攜帶 API Key,並傳入 end_user_ip)
使用者 → 你的前端(登入 / 註冊 / 重設密碼頁)
→ 你的後端(校驗工作階段、人機驗證、業務頻控)
→ EngageLab OTP API(攜帶 API Key,並傳入 end_user_ip)
此代碼塊在浮窗中顯示
dev_key與dev_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 時,請勿立即連續重試。如持續出現,請先在安全中心查看是否已觸發送量限額或緊急止損,再聯絡技術支援。
金鑰洩露時怎麼做
- 在 OTP 控制台 停用或輪換 API Key。
- 在 安全中心 使用緊急止損,暫停 SMS 發送。
- 在 歷史紀錄 和回呼中核對異常發送。
- 收緊 API Key IP 白名單,並檢查日 / 月發送量限額是否合理。
- 確認風險消除後再恢復發送。
上線檢查清單
- API 只在伺服器端呼叫,
dev_secret未進入前端、App 或公開倉庫。 - 正式環境 API Key 已設定伺服器出口 IP 白名單。
- 安全中心已開啟號碼頻控;需要按 IP 限制時,發送請求已傳入
end_user_ip。 - 已設定日 / 月發送量限額,並設定了用量相關回呼。
- 「取得驗證碼」介面在呼叫 EngageLab 前已做人機驗證和業務頻控。
- 已明確被刷時的處置順序:停用 Key → 緊急止損 → 核查發送紀錄。










