4. 验证码滥用概述

验证码(CAPTCHA)最初的设计目标非常朴素:区分“人”和“机器”。但在真实攻防中,它早已不只是登录页上的一个输入框,而是贯穿注册、登录、短信发送、下单、领券、评论、投票、找回密码等关键业务节点的风控闸门。理解验证码滥用,核心不是记住某一种验证码长什么样,而是理解攻击者为什么盯着它、如何绕过它,以及绕过之后会对业务造成什么连锁影响。

一、验证码类型与防护强度分层

从工程视角看,验证码可以按“人机区分依据”分为几类。不同类别对应的攻击成本和防御收益差异很大,不能简单认为“越难越好”。

类型 典型形式 主要防御点 常见绕过方式
文本/图形验证码 扭曲字母数字、干扰线 OCR 识别成本 OCR、打码平台、深度学习识别
行为验证码 滑块、点选、轨迹 行为特征与轨迹真实性 轨迹模拟、浏览器自动化、真人打码
短信/邮件验证码 6 位数字、时效码 通道成本与频控 短信轰炸、接码平台、协议重放
无感验证 风险评分、设备指纹 环境与行为一致性 设备伪造、IP 代理、养号环境

这张表的关键结论是:验证码的强度不取决于“看起来多复杂”,而取决于攻击者获取“通过凭证”的成本。短信验证码看似简单,但如果接码平台能批量提供号码,其防护强度可能低于一个设计良好的行为验证码。

二、滥用动机:攻击者到底图什么

验证码滥用从来不是孤立行为,它通常服务于更大的黑产链条。常见动机包括:

  • 资源薅取:批量注册账号领取新人券、试用额度、积分奖励,再通过转卖或套现获利。
  • 短信轰炸与通道消耗:利用短信验证码接口对目标手机号进行高频发送,造成骚扰或直接消耗企业短信费用。
  • 账号接管前置:通过撞库、枚举手机号,配合验证码绕过完成登录或改密。
  • 数据爬取与内容污染:绕过评论、投票、问卷的验证码限制,批量灌水或刷量。
  • 业务逻辑探测:用自动化脚本探测接口参数、频率限制和风控规则,为后续攻击铺路。

核心判断:当某个业务节点同时具备“可获利”和“验证码可绕过”两个条件时,它几乎必然会被滥用。防御方要优先保护的是高价值、低频次、可量化的节点,而不是所有页面都堆验证码。

三、自动化绕过的基本流程

攻击者绕过验证码通常不是“破解图片”这么单一,而是一条完整的流水线。典型流程如下:

  1. 接口发现:抓包分析验证码获取、校验、业务提交三个接口的调用关系。
  2. 凭证获取:通过 OCR、打码平台、接码平台或真人众包获得可通过的验证码答案。
  3. 会话保持:维持 Cookie、、设备指纹等上下文,确保验证码与业务请求绑定不被破坏。
  4. 频率规避:使用代理 IP 池、随机 UA、请求间隔抖动,绕过频控和风控评分。
  5. 批量执行:将验证码答案回填到业务请求中,完成注册、登录、发送或提交。

下面是一段简化的自动化请求示意,重点不是代码本身,而是观察“验证码获取”和“业务提交”之间的绑定关系:

POST /api/captcha/get HTTP/1.1
Host: target.example.com
Cookie: session=abc123

→ 返回: {"captchaId":"c_8891","image":"..."}

POST /api/captcha/verify HTTP/1.1
Content-Type: application/json

{"captchaId":"c_8891","answer":"7f3k"}

→ 返回: {"pass":true,"ticket":"t_5521"}

POST /api/user/register HTTP/1.1
Content-Type: application/json

{"phone":"138****0000","ticket":"t_5521"}

如果服务端只校验 ticket 是否存在,而不校验它是否与当前会话、设备、手机号绑定,那么攻击者就可以把一次通过的验证码票据复用到大量请求中。这是验证码滥用中最常见、也最容易被忽视的漏洞。

四、业务影响与典型场景

验证码被绕过后的影响往往不是“多了一些垃圾账号”这么简单,而是会沿着业务链路放大。

  • 成本侧:短信通道被刷,单日费用可能从几百元飙升到数万元。
  • 数据侧:虚假账号污染用户画像,导致推荐、风控、营销模型失真。
  • 体验侧:正常用户被误伤,验证码越来越难,转化率下降。
  • 合规侧:短信轰炸、账号盗用可能引发投诉与监管风险。

场景复盘:某活动页使用图形验证码保护“领取优惠券”接口。攻击者发现验证码答案与 captchaId 弱绑定,且票据可复用,于是用一次识别结果批量领取数万张券。事后复盘发现,问题不在图形复杂度,而在票据生命周期和业务绑定缺失。

五、常见误区与防御要点

在验证码滥用的防御中,以下误区非常普遍:

  • 误区一:验证码越难越安全。过难会伤害真实用户,且对打码平台和深度学习模型而言,难度提升带来的成本增加有限。
  • 误区二:只在前端加验证码。前端校验可被直接跳过,服务端必须独立校验并绑定业务上下文。
  • 误区三:忽略票据复用。验证码通过后颁发的 ticket 必须一次性、短时效、强绑定。
  • 误区四:只防注册不防发送。短信发送接口往往是成本最高的滥用入口,需要独立频控与风险评分。

防御要点:验证码只是风控的一层,不是全部。有效策略是“验证码 + 频控 + 设备指纹 + 行为评分 + 业务绑定”的组合。任何单点防御,在自动化流水线面前都容易被绕过。