驗證碼系統的目的是:阻止自動化腳本訪問網頁資源,驗證訪問者是否為真實人類用戶。
它通過各種測試(圖像、行為、計算等)判斷請求是否來自機器人。
一、驗證碼系統的整體架構
驗證碼系統通常由 客戶端 + 服務端 + 風控模型 + 數據采集 四大部分組成:
[用戶瀏覽器/App]↓ 加載驗證碼組件(圖形/UI/JS)
[客戶端模塊]↓ 采集行為數據(鼠標、滑動、指紋)
[行為加密&驗證模塊]↓ 加密行為參數 + 加 challenge 提交
[服務端風控系統]↓ 分析行為數據 + 評分/分類/判斷
[驗證結果]→ 通過則返回 token → 前端提交業務系統驗證
二、驗證碼的分類體系
類型 | 示例 | 驗證機制 | 是否人機交互 |
---|---|---|---|
文本識別類 | 扭曲字符、算術題 | OCR識別 / 計算 | ? |
圖像識別類 | 點選圖(reCaptcha/hCaptcha) | 模型識別圖片內容 | ? |
滑塊驗證類 | 極驗、阿里滑塊 | 拖拽缺口對齊判斷軌跡 | ? |
行為分析類 | Turnstile、reCAPTCHA v3 | 無人操作 → 依賴設備+行為特征 | ? |
游戲式驗證 | FunCaptcha | 拖動拼圖/旋轉圖 → 交互行為 | ? |
生物識別類 | 人臉、指紋、聲紋等 | 攝像頭/麥克風采集+比對 | ? |
三、驗證碼的驗證流程
以典型圖形驗證碼為例,完整交互過程如下:
頁面加載階段
前端引入第三方驗證碼 SDK
向驗證碼服務獲取初始化參數(如
sitekey
,challenge
,session_id
)
用戶行為階段
顯示滑塊/圖片題/UI等
記錄用戶操作行為(鼠標軌跡、點擊、拖拽等)
使用 JavaScript 加密行為數據(AES/RC4/混淆)
客戶端提交階段
將加密參數發送到驗證碼驗證接口(帶上
challenge
,payload
,action
,fingerprint
等)
服務端分析階段
解密行為數據
分析用戶設備、行為、指紋
利用機器學習模型判斷:人類 / Bot / 可疑
返回結果階段
驗證通過 → 返回
token
否則重新觸發圖形驗證、或提示驗證失敗
業務系統驗證階段
客戶端將
token
提交給后端 API后端使用
secret
進行 token 驗簽驗簽通過 → 放行業務請求
四、行為采集機制詳解
驗證碼不只是看用戶點沒點對,它更關注用戶的“行為像不像人”:
常見采集行為
類型 | 內容舉例 |
---|---|
鼠標軌跡 | 移動速度、加速度、反向次數等 |
滑動軌跡 | 抖動、停頓點、軌跡長度等 |
鍵盤輸入節奏 | 間隔時間、回刪頻率等 |
觸控行為 | 角速度、手指個數、縮放操作等 |
傳感器信息 | 陀螺儀、加速度、磁力 |
瀏覽器指紋 | UA、插件、分辨率、字體等 |
五、驗證碼核心參數解析
參數名稱 | 描述 |
---|---|
sitekey | 前端公鑰(客戶站點唯一) |
challenge | 當前驗證碼挑戰標識 |
payload /w | 加密的行為數據或設備參數 |
token | 驗證成功后生成的令牌 |
action | 當前操作意圖(如 login、submit) |
response | 客戶端結果 → 服務端驗簽 |
六、驗證碼安全機制概述
驗證碼系統一般包含如下幾層防護:
機制 | 功能描述 |
---|---|
加密行為數據 | 防止偽造用戶操作 |
Token 簽名機制 | 保證結果不可偽造(通常帶有簽名) |
一次性令牌 | Token 單次有效、短時間內過期 |
滑動軌跡建模 | 檢測是否真實人類操作軌跡 |
指紋反爬策略 | 檢測設備環境、腳本執行、模擬行為 |
七、典型驗證碼廠商及特點對比
廠商 | 驗證方式 | 特點 |
---|---|---|
Google reCAPTCHA | 圖題/Invisible/v3 | v3使用評分機制,不打斷操作 |
hCaptcha | 圖題 | Cloudflare默認,圖像模型復雜 |
Arkose FunCaptcha | 游戲題/拖動 | 使用行為交互 + WebGL 識別 |
極驗 | 滑塊 + 拼圖 + 行為 | 支持定制風控策略,行為分析強 |
Cloudflare Turnstile | 無感驗證 | 自動行為分析,不打斷操作 |
阿里滑塊 | 滑塊 + 圖文 | 滑動拼圖、行為軌跡強校驗 |
八、驗證碼對抗與破解思路
1)數據采集與還原
使用抓包工具(mitmproxy/Fiddler)
獲取前端請求參數結構
找到
payload/w/blob
等行為參數
2)JS 解密分析
使用 Babel 對混淆 JS 解碼
找到行為數據采集與加密的函數
Hook 核心邏輯:如滑動軌跡加密器、token 構造器
3)構造自動化模擬環境
使用 Puppeteer/Selenium 模擬人類操作
配合 stealth 插件隱藏自動化痕跡
模擬鼠標軌跡/觸控軌跡/拖動行為等
4)打碼/識圖模塊
針對圖形題,使用:
2Captcha、CapMonster
OCR 自定義識別
模型訓練(YOLO/ResNet)
九、如何設計一個驗證碼系統
如果要自己設計一個驗證碼系統,應該包含:
模塊 | 技術點 |
---|---|
前端模塊 | React/Vue + Canvas/WebGL 渲染 |
行為采集 | JS 監聽器收集鼠標/滑動/傳感器數據 |
加密模塊 | AES/RC4 + 自定義混淆 + JS 加密函數 |
風控服務 | 使用 Python/Go/Java 訓練行為分類模型 |
驗證接口 | 接收行為數據、驗證邏輯、簽名 token 發回 |
后端驗簽 | 客戶業務系統使用 secret 進行 token 驗簽 |
十、總結
驗證碼系統 = 前端 UI + 行為加密 + 后端風控判斷 + 業務接口聯動,是整個風控體系的一部分。
模塊 | 破解思路 |
---|---|
前端行為 | 模擬人類軌跡/點擊/觸控 |
參數加密 | Babel 解混淆 + hook 分析 |
token 構造 | 重放、偽造、hook 構造函數 |
后端驗證 | 抓包分析 token 簽名接口,測試邏輯 |