關于 驗證碼系統 詳解

驗證碼系統的目的是:阻止自動化腳本訪問網頁資源,驗證訪問者是否為真實人類用戶。

它通過各種測試(圖像、行為、計算等)判斷請求是否來自機器人。


一、驗證碼系統的整體架構

驗證碼系統通常由 客戶端 + 服務端 + 風控模型 + 數據采集 四大部分組成:

[用戶瀏覽器/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/v3v3使用評分機制,不打斷操作
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 簽名接口,測試邏輯

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/90821.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90821.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90821.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

微服務集成snail-job分布式定時任務系統實踐

前言 從事開發工作的同學,應該對定時任務的概念并不陌生,就是我們的系統在運行過程中能夠自動執行的一些任務、工作流程,無需人工干預。常見的使用場景包括:數據庫的定時備份、文件系統的定時上傳云端服務、每天早上的業務報表數…

依賴注入的邏輯基于Java語言

對于一個廚師,要做一道菜。傳統的做法是:你需要什么食材,就自己去菜市場買什么。這意味著你必須知道去哪個菜市場、怎么挑選食材、怎么討價還價等等。你不僅要會做菜,還要會買菜,職責變得復雜了。 而依賴注入就像是有一…

skywalking鏡像應用springboot的例子

目錄 1、skywalking-ui連接skywalking-oap服務失敗問題 2、k8s環境 檢查skywalking-oap服務狀態 3、本地iidea啟動服務連接skywalking oap服務 4、基于apache-skywalking-java-agent-9.4.0.tgz構建skywalking-agent鏡像 4.1、Dockerfile內容如下 4.2、AbstractBuilder.M…

3. java 堆和 JVM 內存結構

1. JVM介紹和運行流程-CSDN博客 2. 什么是程序計數器-CSDN博客 3. java 堆和 JVM 內存結構-CSDN博客 4. 虛擬機棧-CSDN博客 5. JVM 的方法區-CSDN博客 6. JVM直接內存-CSDN博客 7. JVM類加載器與雙親委派模型-CSDN博客 8. JVM類裝載的執行過程-CSDN博客 9. JVM垃圾回收…

UnityShader——SSAO

目錄 1.是什么 2.原理 3.各部分解釋 2.1.從屏幕空間到視圖空間 2.2.以法線半球為基,獲取隨機向量 2.3.應用偏移,并將其轉換為uv坐標 2.4.獲取深度 2.5.比較并計算貢獻 2.6.最后計算 4.改進 4.1.平滑過渡 4.2.模糊 5.變量和語句解釋 5.1._D…

【設計模式】外觀模式(門面模式)

外觀模式(Facade Pattern)詳解一、外觀模式簡介 外觀模式(Facade Pattern) 是一種 結構型設計模式,它為一個復雜的子系統提供一個統一的高層接口,使得子系統更容易使用。 外觀模式又稱為門面模式&#xff0…

【6.1.1 漫畫分庫分表】

漫畫分庫分表 “數據量大了不可怕,可怕的是不知道如何優雅地拆分。” 🎭 人物介紹 架構師老王:資深數據庫架構專家,精通各種分庫分表方案Java小明:對分庫分表充滿疑問的開發者ShardingSphere師傅:Apache S…

Tomcat問題:啟動腳本startup.bat中文亂碼問題解決

一、問題描述 我們第一次下載或者打開Tomcat時可能在控制臺會出現中文亂碼問題二、解決辦法 我的是8.x版本的tomcat用notepad打開:logging.properties 找到:java.util.logging.ConsoleHandler.encoding設置成GBK,重啟tomcat即可

Linux中Gitee的使用

一、Gitee簡介:Gitee(碼云)是中國的一個代碼托管和協作開發平臺,類似于GitHub或GitLab,主要面向開發者提供代碼管理、項目協作及開源生態服務。適用場景個人開發者:托管私有代碼或參與開源項目。中小企業&a…

Oracle大表數據清理優化與注意事項詳解

一、性能優化策略 1. 批量處理優化批量大小選擇: 小批量(1,000-10,000行):減少UNDO生成,但需要更多提交次數中批量(10,000-100,000行):平衡性能與資源消耗大批量(100,000行):適合高配置環境,但需監控資源使…

Anaconda及Conda介紹及使用

文章目錄Anaconda簡介為什么選擇 Anaconda?Anaconda 安裝Win 平臺macOS 平臺Linux 平臺Anaconda 界面使用Conda簡介Conda下載安裝conda 命令環境管理包管理其他常用命令Jupyter Notebook(可選)Anaconda簡介 Anaconda 是一個數據科學和機器學…

外包干了一周,技術明顯退步

我是一名本科生,自2019年起,我便在南京某軟件公司擔任功能測試的工作。這份工作雖然穩定,但日復一日的重復性工作讓我逐漸陷入了舒適區,失去了前進的動力。兩年的時光匆匆流逝,我卻在原地踏步,技術沒有絲毫…

【QT】多線程相關教程

一、核心概念與 Qt 線程模型 1.線程與進程的區別: 線程是程序執行的最小單元,進程是資源分配的最小單元,線程共享進程的內存空間(堆,全局變量等),而進程擁有獨立的內存空間。Qt線程只要關注同一進程內的并發。 2.為什么使用多線程…

VS 版本更新git安全保護問題的解決

問題:我可能移動了一個VS C# 項目,然后,發現里面的git版本檢測不能用了 正在打開存儲庫: X:\Prj_C#\3D fatal: detected dubious ownership in repository at X:/Prj_C#/3DSnapCatch X:/Prj_C#/3D is owned by:S-1-5-32-544 but the current …

Git常用命令一覽

Git 是基于 Linux內核開發的版本控制工具。與常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本庫的方式,不必服務器端軟件支持(ps:這得分是用什么樣的服務端,使用http協議或者git協議等不太一樣。并且在…

基于 JSON 文件定位圖片缺陷點并保存

基于JSON的圖片缺陷處理流程 ├── 1. 輸入檢查 │ ├── 驗證圖片文件是否存在 │ └── 驗證JSON文件是否存在 │ ├── 2. 數據加載 │ ├── 打開并加載圖片 │ └── 讀取并解析JSON文件 │ ├── 3. 缺陷信息提取 │ ├── 檢查JSON中是否存在shapes字…

Redis基礎學習(五大值數據類型的常用操作命令)

目錄 一、Redis基本知識與Redis鍵(key)常用操作命令。 二、Redis的五大值的數據類型。(value) 三、Redis關于鍵(key)的值常用操作指令表格統計。 (1)字符串(String&#…

Ubuntu——辦公軟件 LibreOffice 安裝與使用指南

十四、LibreOffice 安裝與使用1、核心組件組件????圖標????對應MS Office????核心功能定位????Writer??📝Word專業文檔處理與排版??Calc??📊Excel數據計算與分析??Impress??🎬PowerPoint演示文稿制作??Draw??&…

Securecrt丟失tab以及終端重新配色

今天在使用 Securecrt 的時候,發現 Securecrt 的 tab 標簽消失不見了,仔細回想起來,應該是上一次誤按了 alt enter 最大化,然后導致配置丟失的問題 還有表現就是菜單中的 Session Tabs 無論勾選還是不勾選都沒有任何變化&#xf…

frp搭建內網穿透教程

frp搭建內網穿透教程 步驟1:準備工作 公網服務器:需要一臺具有公網IP的服務器作為中轉服務器,安裝frp服務器端(frps)。內網設備:需要暴露服務的內網設備,安裝frp客戶端(frpc&#xf…