防止簡訊介面被盜用
簡訊發送介面一旦被未授權呼叫,或 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 → 緊急止損 → 核查發送紀錄。










