短信驗證碼看似簡單的6位數字,實則暗藏復雜業務鏈路與風控挑戰。從游戲行業的賬號體系保護,到黑灰產攻防的成本平衡,短信防控需要在體驗、安全與通道穩定性間尋找微妙的平衡點。本文將深度拆解短信風控的三層防御體系,揭秘那些隱藏在發送按鈕背后的業務邏輯與產品設計哲學。
最近 vibe coding 很火,一句話可能就能生成一個登錄框。輸入手機號、點擊獲取驗證碼、填驗證碼、完成注冊,看起來非常順滑。但真正做過賬號體系的人都知道,登錄框只是冰山露出來的一角。它下面藏著短信通道、驗證碼校驗、賬號注冊、設備識別、渠道投訴、供應商評級、黑名單聯動等一整套業務鏈路。
游戲行業尤其明顯。游戲是典型的大 ToC 業務,用戶規模大、賬號價值高、充值場景多、權益體系復雜,只要一個手機號能注冊賬號,背后就可能對應禮包、首充、拉新返利、渠道結算、虛擬資產交易等利益。利益足夠大,黑灰產自然會圍上來。
短信驗證碼本身又是一個很特殊的入口。正常用戶收不到驗證碼,會影響注冊轉化;異常請求大量消耗短信,會帶來直接費用;更嚴重的是,如果某個短信簽名短時間內投訴過多,運營商和通道商可能會對簽名降頻、攔截,甚至封禁。到這個時候,受影響的就不是幾個異常手機號,而是整條正常業務鏈路。
我之前做過一段時間短信產品經理,對短信下發機制有一些了解。最近在賬號風控治理中又重新接觸短信相關防控,發現短信這件事看似基礎,但真正要做好并不簡單。它不是單純“加一個驗證碼”或者“限制一分鐘一次”就能解決的問題,而是要在成本、體驗、識別能力和處置策略之間不斷平衡。
這篇文章不講短信供應商商務選型,也不講具體攻擊腳本。這里我只從產品和風控落地視角,聊一聊比較通用的短信防控實踐。
很多團隊做短信防控,第一反應是卡“發送驗證碼”這個動作。這個方向沒錯,但不夠。一條驗證碼短信從用戶點擊按鈕開始,至少會經過五個關鍵環節:用戶請求、基礎頻控、風險決策、短信網關、驗證碼提交。短信發送成功也不是終點,后面還要看驗證碼是否被提交、是否注冊成功、是否觸發投訴。

如果只看發送動作,就會漏掉很多重要信號。比如某批請求發送頻率并不高,但驗證碼提交幾乎都是秒過;某批手機號分散在不同 IP 上,但設備指紋高度相似;某批請求沒有造成注冊成功,卻造成大量短信投訴。這些都不是單點頻控能發現的。
所以短信風控的目標不是“讓短信少發”,而是讓該發的短信穩定發出去,讓不該發的請求在合適的位置被攔下或被二次驗證。
這句話聽起來像廢話,但它決定了產品設計方向:不能只追求攔截率,也不能只追求用戶體驗。規則太緊,正常用戶注冊會受影響;規則太松,短信通道和賬號體系都會暴露在風險里。
我會把短信防控拆成三層:成本門檻層、行為識別層、分級處置層。

第一層是成本門檻層,用低成本規則擋住最明顯的異常請求。第二層是行為識別層,通過設備、請求、提交行為、黑名單等多維數據識別復雜機器流量。第三層是分級處置層,對疑似風險請求不簡單誤殺,而是通過上行短信、掃臉、人機挑戰等方式進一步確認。
短信風控最基礎的能力一定是頻控。不要嫌它簡單,很多線上事故就是因為最基礎的頻控沒做好。
頻控通常圍繞手機號、IP、設備、賬號、業務場景展開。比如同一手機號 1 分鐘內最多發送 1 次,1 小時最多發送 5 次,24 小時最多發送 10 次;同一 IP、同一設備或同一瀏覽器指紋也要有對應閾值。
這里有一個容易被忽略的問題:自然時間和滾動時間。
自然時間是按照固定時間邊界計數,比如“今天 0 點到 24 點最多 10 次”。滾動時間是從當前請求向前回看,比如“過去 24 小時最多 10 次”。對于短信風控來說,最佳實踐通常是滾動計數。

為什么?因為自然時間存在邊界漏洞。假設系統按自然日計數,攻擊者可以在 23:58 打滿當天額度,0:01 之后額度清零,又繼續請求一輪。規則看起來沒問題,實際防控被時間邊界繞開了。
滾動時間實現成本更高,尤其在數據量大時會涉及緩存、滑動窗口、聚合統計,但它更符合風控場景。產品經理在寫需求時,不要只寫“24 小時最多 X 次”,最好明確口徑:是自然日還是過去 24 小時;是按手機號計數,還是手機號 + IP + 設備組合計數;命中閾值后是直接攔截,還是延長冷卻時間。
除了頻控,圖形驗證碼也是成本門檻層的重要工具。很多人覺得圖形驗證碼很基礎,但從攻防視角看,它貫穿整個短信盜刷防控過程。
常見的圖形驗證碼包括滑動拼圖、文字點選、圖標點選、語序選詞、空間推理、障礙躲避等。驗證碼的價值不只是“讓用戶做一道題”,而是提升機器請求成本,并給系統提供行為數據,比如軌跡是否自然、完成時間是否異常、同一設備是否高頻通過。
當然,驗證碼不是越難越好。注冊登錄是高轉化場景,如果一上來就給所有用戶彈復雜驗證碼,正常用戶會被一起懲罰。更合理的方式是分層觸發:低風險用戶無感通過,中風險用戶觸發輕量驗證碼,高風險用戶觸發更強驗證。
號段識別也屬于基礎能力。比如 170、171、165 等虛擬運營商號段在某些業務里風險更高,可以根據業務情況做更嚴格的策略。但不建議把虛擬號段簡單等同于黑名單,直接全量攔截會帶來誤傷。更穩妥的做法是提高驗證等級、降低發送頻次、疊加設備和 IP 風險判斷。
成本門檻層解決的是“別讓明顯異常請求輕松進來”。它不追求特別聰明,但必須穩定、清晰、可解釋。
第一層規則可以擋住一部分粗糙流量,但擋不住更成熟的黑灰產。成熟黑產不會只用一個 IP、一個手機號、一個設備猛沖,它會拆散請求,分布式地試探系統閾值。這時候就需要進入行為識別層。
行為識別層的核心是多維數據。產品上至少要能拿到手機號、IP、設備指紋、賬號、渠道、業務場景、驗證碼生成時間、驗證碼提交時間、提交結果、失敗次數、請求來源、前端環境等信息。沒有這些埋點,風控就只能靠猜。
設備指紋是這里的關鍵能力。它不是單純拿一個設備 ID,而是綜合瀏覽器、系統、分辨率、時區、字體、Canvas、網絡環境、客戶端版本等信息,生成相對穩定的設備標識,用來識別“換手機號、換 IP,但設備特征高度相似”的請求。
前端請求加密和參數校驗也很重要。它不能從根本上防住所有攻擊,但可以提高腳本化請求門檻。比如短信發送接口不應該裸奔,前后端需要對關鍵參數、時間戳、隨機串、業務場景進行校驗,避免接口被直接復用。注意,這類能力的定位是提高成本,不是絕對安全,真正的風控仍然要靠服務端決策。
驗證碼提交行為同樣值得關注。正常用戶收到短信后,通常會有一個閱讀和輸入過程。如果大量驗證碼都在極短時間內提交成功,就要懷疑是否存在接口自動化、短信接收平臺、批量控制設備等風險。這里不用把規則寫死成“多少秒一定異常”,而是結合業務基線做分層判斷。
黑名單庫是行為識別層的另一個基礎設施。它不應該只是一個靜態表,而應該是動態更新的風險資產庫,至少包含以下幾類:

黑名單最怕兩個問題:一是更新慢,等運營手動導入時風險已經過去;二是沒有過期機制,半年以前的風險數據一直影響正常用戶。比較好的方式是給名單設置來源、等級、命中原因、過期時間和復核機制。
行為識別層的重點不是把規則寫得多復雜,而是把原本分散的數據串起來。手機號、IP、設備單獨看都正常,組合起來可能就不正常。風控能力的差距,很多時候就在這個“組合判斷”里。
短信風控最難的地方,不是攔截黑產,而是不誤傷正常用戶。尤其在游戲業務里,用戶注冊和登錄往往發生在高情緒場景:新游開服、活動領取、好友邀請、充值回流。這個時候如果正常用戶收不到驗證碼,或者被連續攔截,很容易直接流失。
所以對疑似風險請求,不一定要直接攔截。更好的方式是分級處置。
低風險請求直接放行;中風險請求增加輕量驗證,比如圖形驗證碼或冷卻時間;高風險但不確定的請求增加強驗證,比如上行短信、人臉識別、實名校驗;已確認風險請求再直接攔截。
上行短信是一個特別值得重視的能力。所謂上行短信,就是用戶主動發送指定內容到指定號碼,系統收到后完成驗證。它本身不復雜,但在實踐中并不是所有短信供應商都能穩定支持上行能力,而且接入、解析、回調、狀態同步都需要額外建設。
為什么它有效?因為它把驗證動作從“企業給用戶發短信”變成“用戶主動發短信給企業”。對正常用戶來說,雖然多了一步,但能完成;對批量盜刷來說,成本會明顯上升。尤其在疑似風險但不敢直接攔截的場景,上行短信是一個不錯的中間態。
掃臉、人臉識別、實名校驗也屬于強驗證手段,但要謹慎使用。它們的驗證強度高,用戶打擾也高,不適合放在短信發送前的常規鏈路里。更合理的觸發場景是:高價值賬號、疑似批量設備、異常領取權益、異常充值返利、賬號找回等風險更高的業務節點。
把這些動作放在一起看,可以整理成一張風險分級處置矩陣。它的價值不是給所有業務一個固定答案,而是幫助產品、風控、研發和客服對齊“什么情況該怎么處理”。

這里有個產品細節:強驗證的提示文案要解釋清楚。不要只彈一句“請求異常”,可以寫成“當前環境存在安全風險,為保護賬號安全,請完成驗證后繼續”。這類文案不是為了好看,而是為了減少用戶的不確定感和客服壓力。
分級處置層的本質是把風險決策從“是/否”變成“放行/觀察/驗證/攔截”。這會讓系統更復雜,但也更符合真實業務。
如果要把短信風控真正跑起來,前臺策略只是其中一部分,后臺能力更重要。
第一套是規則配置后臺。產品和風控同學需要能按業務場景配置規則,比如注冊、登錄、換綁、找回密碼、領取禮包分別使用不同閾值。不要把所有場景套一套規則,注冊場景可以更嚴格,登錄場景要更重視老用戶體驗,找回密碼則要更重視賬號安全。
規則配置后臺最小要支持“業務場景、統計維度、時間窗口、處置動作”四類配置。配置粒度太粗,規則會互相誤傷;配置粒度太細,又會難以維護。比較穩妥的方式,是先搭一個能覆蓋 80% 場景的基礎模型。

第二套是監控看板。短信風控必須看數據,至少包括發送請求量、發送成功率、驗證碼提交率、注冊轉化率、攔截量、強驗證通過率、短信成本、供應商失敗率、投訴量、簽名狀態等。只看攔截量沒有意義,攔截量升高可能代表風控有效,也可能代表正常用戶被誤傷。
監控看板的核心不是把指標堆滿,而是同時回答三件事:黑產有沒有變多、正常用戶有沒有受傷、短信通道有沒有變差。

第三套是應急開關。短信通道一旦異常,影響會非常快。比如某個供應商失敗率升高,要能快速切換通道;某個規則誤傷,要能快速降級;某個簽名投訴異常,要能暫停對應場景或切換備用簽名。沒有應急開關,風控系統本身也會變成風險源。
我個人建議,每一條核心規則都至少配三樣東西:命中原因、處置結果、回滾方式。命中原因用于排查,處置結果用于復盤,回滾方式用于止損。
還有一個容易被忽略的點:短信風控需要和客服對齊。用戶收不到驗證碼時,第一反應通常是找客服。如果客服后臺看不到用戶為什么被攔截,只能回復“請稍后再試”,體驗會非常差。
第一個坑,是把短信成本當成唯一目標。短信確實有成本,但短信風控不是省錢項目。它的核心價值是保護賬號體系、保護通道穩定性、保護正常用戶體驗。如果只盯著短信費用,很容易把規則收得過緊,最后省了短信費,丟了注冊轉化。
第二個坑,是只做發送頻控,不做提交校驗。短信發出去以后,驗證碼是否提交、提交是否成功、多久提交、失敗幾次,都是重要信號。只管發送不管提交,就像只看門口排隊,不看進店以后發生了什么。
第三個坑,是規則沒有分場景。注冊、登錄、換綁、找回密碼、支付確認的風險完全不同,規則必須和業務語義綁定。
第四個坑,是黑名單只進不出。風控名單不是垃圾桶,不能什么都往里扔。沒有過期、沒有降級、沒有復核,時間久了必然誤傷。
第五個坑,是把圖形驗證碼當萬能藥。驗證碼能提高攻擊成本,但也會提高用戶成本。它應該是動態策略的一部分,而不是所有用戶都必須跨過的一堵墻。
短信本身是個很簡單的服務:生成驗證碼、調用供應商、用戶收到、輸入校驗。簡單到很多人會覺得這不就是一個接口嗎?
但在真實業務里,短信又一點都不簡單。它連接著賬號注冊、用戶體驗、營銷成本、通道穩定、投訴治理和黑灰產攻防。尤其在游戲這種高用戶量、高利益密度的行業里,短信入口做不好,后面會牽出一串問題。
我理解的短信防控,不是單純把黑產擋在門外,而是建立一套可持續的平衡機制:前面用成本門檻層擋住明顯異常,中間用行為識別層判斷復雜風險,后面用分級處置層減少誤傷。再配合規則后臺、監控看板、應急開關和客服可解釋能力,整個體系才算真正能跑起來。
回到開頭說的 vibe coding。AI 可以很快幫你做出一個登錄框,但登錄框之下的業務,不會因為頁面生成得快就自動消失。短信風控就是這類“看起來不起眼,但出了事很疼”的底層能力。
產品經理真正要補的,往往不是某個按鈕怎么畫,而是按鈕按下去之后,系統如何判斷、如何保護、如何兜底。
短信驗證碼只有 6 位,但它背后的產品設計,遠不止 6 位。
轉載:人人都是產品經理

蘭亭妙微(藍藍設計)m.hengshangtqd.cn 是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的大數據可視化界面設計、B端界面設計、桌面端界面設計、APP界面設計、圖標定制、用戶體驗設計、交互設計、UI咨詢、高端網站設計、平面設計,以及相關的軟件開發服務,咨詢電話:01063334945。
