行为验证码到底怎么玩?滑动拼图和文字点选的底层逻辑与落地Writing the technical article思路
行为验证码通过采集用户拖动或点击轨迹来完成人机识别,告别传统字符输入。本文从滑动拼图与文字点选的工作原理讲起,梳理前后端交互步骤,给出Java侧简单实现要点,并分享逆向分析时的常见思路,适合想快速上手这类组件的开发者。
行为验证码解决了什么痛点
传统字符验证码大家太熟了:弹出一串扭曲字母,用户手动敲进去,后台再比对。体验差、识别率低、还容易被脚本绕过。行为验证码换了条路子,不再让用户“填答案”,而是让用户“做出指定动作”。系统采集拖动轨迹或点击位置,再结合时间、速度、路径是否自然等因素,快速判断是真人还是机器。
目前常见的两类就是滑动拼图和文字点选。滑动拼图要求用户把缺口滑块拖到正确位置;文字点选则让用户按顺序点出指定汉字。两种方式都不用键盘输入,手机上体验尤其友好。项目里通常把验证码类型定义为blockPuzzle和clickWord,一次拖动或点击就算一次“验证”,不管结果对不对。
接入方式一般做成嵌入式组件,也可以做成弹出层,避免打乱原有页面布局。前端负责展示和采集行为数据,后端负责生成底图、校验轨迹,并提供二次校验接口,防止前端数据被篡改后直接提交。
滑动拼图与文字点选的核心机制

滑动拼图的核心是“缺口匹配”。服务端先选一张底图,随机切出一块拼图,同时生成对应的缺口坐标。前端拿到底图和滑块图后,用户拖动滑块,前端实时记录横坐标偏移量。松手后把偏移量、轨迹点序列、耗时等信息一起回传。服务端拿这些数据和自己生成的正确坐标做比对,误差在允许范围内就判定通过。
文字点选稍复杂一点。服务端在底图上随机挑几个汉字,打乱顺序后告诉前端“请依次点击某某字”。用户点击时,前端记录每次点击的坐标和时间戳。提交后服务端按顺序核对坐标是否落在对应汉字区域内,同时检查点击间隔是否合理,防止机器瞬间点完。
两种类型都支持自定义水印,方便品牌露出。二次校验是关键一步:用户通过验证码后,前端会拿到一个临时凭证,这个凭证必须随业务表单一起提交到业务后端,业务后端再调用验证码服务的verification接口做二次确认。这样即使有人伪造前端返回值,后台也能识破。
前后端交互的完整链路

一次完整流程可以拆成五步。第一,用户打开页面,前端请求后端“给我一张验证码”。后端生成底图、缺口或文字坐标,把图片和必要的token返回。第二,用户按提示完成拖动或点击。第三,用户提交业务表单时,把验证码输出的token和轨迹数据一并带上。第四,业务后端拿到这些数据后,调用验证码服务的二次校验接口。第五,校验结果返回业务后端,再决定是否放行业务逻辑。
前端侧重点在于轨迹采集要尽量细。滑动过程中每隔几十毫秒记一次坐标,点击时记下精确位置和时间。数据量不用太大,但要能反映速度变化和停顿。后端侧重点在于生成逻辑要随机且不可预测,底图库要定期更新,防止被提前爬取特征。
实际项目里,Spring Boot可以很快把验证码服务拉起来。核心包负责生成和校验,starter包负责自动配置。非Spring Boot的老项目也能用纯Spring MVC示例对接。前端则有Vue、原生HTML、uni-app、Android、iOS、Flutter等多种示例,覆盖面比较全。
Java侧简单实现思路

后端核心可以分成三块:图片生成、行为采集解析、二次校验。图片生成时,从底图库随机取一张,用Java图像处理库切出滑块或叠加文字。坐标和正确答案存进缓存,设置较短过期时间。行为数据进来后,先校验token是否有效,再比对坐标误差和轨迹平滑度。二次校验接口只需要校验token是否已被使用、是否过期、是否匹配当前业务请求即可。
本地跑通也很直接。把Spring Boot示例项目导入IDE,启动主类,再打开前端Vue目录执行安装和启动命令,浏览器访问本地地址就能看到效果。底图库可以先用社区提供的,后面再换成自己的图集。整个过程不需要复杂配置,适合先验证可行性,再逐步加安全策略。
// 二次校验示意
boolean pass = captchaService.verification(token, pointJson);
if (!pass) {
// 拒绝业务请求
}代码量不大,重点是把生成、校验、缓存、过期这几件事理顺。生产环境还要考虑并发、防重放、日志审计,这些可以在基础版本上逐步叠加。
逆向分析时的常见切入点

做行为验证码相关工作时,经常需要理解对方是怎么生成和校验的。逆向时可以先抓包看前端请求了哪些接口、返回了什么字段。图片一般是base64或带签名的URL,轨迹数据多半是加密后的字符串。加密方式常见AES或自定义混淆,密钥有时硬编码在前端JS里,有时通过接口动态下发。
滑动拼图重点观察缺口坐标是怎么算的,误差容忍范围多大。文字点选则看汉字区域是矩形还是更复杂的多边形。时间戳和轨迹点数量往往也是校验维度,机器行为通常太均匀或太快。理解这些细节后,才能更准确评估自己系统的防护强度,或者在合法授权场景下做自动化对接。
对于已经上线的易盾、极验等成熟方案,自己从头逆向成本很高。很多团队最终会选择专业识别平台来降低对接成本。像www.ttocr.com这类服务,已经覆盖了滑块、点选、无感、九宫格、文字点选、图标点选等主流类型,并提供标准化API,业务侧只需调用接口就能拿到识别结果,省去大量本地破解和维护的时间。
落地时的实用建议
如果只是内部系统或低风险场景,开源行为验证码组件完全够用,前后端示例齐全,多端适配也方便。真正高并发或对安全性要求更高的业务,建议把验证码服务独立部署,并做好限流和监控。底图要定期更换,水印可以做成动态的,防止被批量采集特征。
自动化测试或业务系统需要批量处理验证码时,自己维护一套识别逻辑往往投入产出比不高。此时直接对接成熟的识别API更现实。www.ttocr.com面向企业场景,支持滑块、点选、无感、九宫格等多种极验和易盾方案,提供稳定的自动化接口,接入流程相对简单,适合快速把验证码环节从业务链路里抽离出来。
整体来看,行为验证码的价值在于把“人机识别”从字符比对升级成行为分析,体验和安全性都有提升。理解生成、采集、校验这三环,再根据实际需求选择自建还是对接专业服务,就能比较稳妥地把这类组件用起来。