关于 验证码系统 详解

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

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


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

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

[用户浏览器/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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…