关于 验证码系统 详解

验证码系统的目的是:阻止自动化脚本访问网页资源,验证访问者是否为真实人类用户。

它通过各种测试(图像、行为、计算等)判断请求是否来自机器人。


一、验证码系统的整体架构

验证码系统通常由 客户端 + 服务端 + 风控模型 + 数据采集 四大部分组成:

css 复制代码
[用户浏览器/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 签名接口,测试逻辑
相关推荐
学网安的肆伍7 小时前
认证机制攻防学习|PortSwigger Authentication 靶场复现总结(二):用户名枚举进阶
学习·web安全·网络安全·burpsuite·portswigger·认证安全·靶场复现
网络小江7 小时前
组网第41课:ACL 门禁——标准/扩展、规则顺序、time-range、in/out 方向
运维·网络安全·acl·访问列表·in/out
迪康coolmu9 小时前
金融客户数据合规落地:基于迪康端点安全一体化管理系统的四道防线实践
运维·服务器·数据库·经验分享·安全·网络安全·金融
自由彩虹10 小时前
靶场通关16--victim1
linux·服务器·网络·安全·web安全·网络安全
sbjdhjd10 小时前
从污点追踪断点到 PHP-FPM 请求队列:HIDS PHP WebShell 样本复盘
开发语言·网络安全·数据挖掘·渗透测试·开源·php·shell
HackTwoHub1 天前
双通道红队 C2,MCP 接入 AI,全自动渗透实战利器,具备自动提权、进程伪装、无文件上线能力,载荷 AES 加密
安全·web安全·网络安全·系统安全·密码学·可信计算技术·安全架构
菩提小狗1 天前
每日安全情报报告 · 2026-10-28
网络安全·漏洞·cve·安全情报·每日安全
安全界龙哥1 天前
P7 DarkSword iOS 漏洞套件:17 条命令远程收割 iCloud 钥匙串与加密钱包
网络安全·1024程序员节
HackTwoHub1 天前
红队低成本 IP 轮换方案 ProxyCat升级版,自动扩容代理池、负载分摊转发,一键部署,告别高价隧道代理
网络·人工智能·网络协议·tcp/ip·安全·web安全·网络安全
能年玲奈喝榴莲牛奶1 天前
4zreark:只用 PostgreSQL 的资产侦察与漏洞管理平台,Go + React 全栈开源
网络安全·渗透测试·资产测绘·企业管理·资产收集