Explainers

reCAPTCHA 评分因素:完整的技术分析

reCAPTCHA 的高级风险分析 (ARA) 引擎会评估数十个信号,以产生 0.0(明确为机器人)和 1.0(明确为人类)之间的分数。该分数决定您是否看不到挑战、复选框、图像网格或硬块。谷歌没有公布确切的评分算法,但广泛的测试和逆向工程已经确定了关键因素。这是对影响比分的因素进行的全面技术分析。


评分因素类别

reCAPTCHA 评估五个类别的信号,每个类别都会影响最终得分:

Final Score = f(Browser Signals, Behavioral Signals, Network Signals, 
                History Signals, Environmental Signals)

第 1 类:浏览器信号(权重:高)

浏览器信号决定客户端是真正的浏览器还是自动化工具。

JavaScript API 的存在

reCAPTCHA 探测无头浏览器缺少或以不同方式实现的 API:

API已检查 真实浏览器中的预期 无头指示器
navigator.userAgent undefinedfalse true(硒,Puppeteer)
navigator.plugins PluginArray 包含 1+ 项 空或缺失
navigator.languages 包含区域设置字符串的数组 数组为空或缺失
navigator.hardwareConcurrency 2-16(与CPU匹配) 有时为 0 或未定义
navigator.deviceMemory 2-16GB 缺少一些无头
window.chrome 具有运行时的对象等 无头 Chrome 中缺失
Notification.permission “默认”、“授予”或“拒绝” 投掷或丢失

对分数的影响: 这些 API 的值缺失或不正确可能会使分数下降 0.3-0.5 分。

帆布特征

reCAPTCHA 渲染隐藏的画布元素并读回像素数据。结果是浏览器 /OS/GPU 组合独有的特征。

// reCAPTCHA performs something similar to:
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
ctx.textBaseline = "top";
ctx.font = "14px 'Arial'";
ctx.fillText("Hello", 2, 2);
const fingerprint = canvas.toDataURL();

分数影响:

  • 一致特征匹配浏览器/OS声明 → 中性
  • 特征匹配已知的无头模式 → -0.3 至 -0.5
  • 画布操作被阻止或返回统一数据 → -0.4 至 -0.6

WebGL 渲染器

WebGL 渲染器字符串揭示了 GPU:

const gl = document.createElement('canvas').getContext('webgl');
const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
const renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
// Expected: "ANGLE (NVIDIA GeForce GTX 1060...)"
// Headless: "SwiftShader" or "Google SwiftShader"

分数影响: SwiftShader(无头 Chrome 中使用的 Google 软件渲染器)是一个强大的机器人指标,其分数下降了 0.3-0.5。


第 2 类:行为信号(权重:非常高)

行为信号在分数计算中具有最高权重。它们从页面加载的那一刻起就被收集。

鼠标移动

reCAPTCHA 跟踪整个页面访问过程中的鼠标坐标和时间戳:

信号 人体图案 机器人模式
运动次数 每个页面访问 50-500 多个事件 0-5 个事件
弹道 可变速度的弯曲路径 直线、匀速
加速 自然轻松-in/ease-out 即时启动/stop
微动 悬停时抖动小 动作之间完全静止
目标超调 修正后轻微超调 精准定位

分数影响: 鼠标不移动会使分数下降 0.4-0.7。

键盘活动

Inter-key timing:
  Human: Variable (50-300ms between keys, varies by key pair)
  Bot: Constant (all keys at same interval, or instant paste)

Key events:
  Human: keydown → keypress → keyup for each character
  Bot: May skip keypress, or fire all events simultaneously

Corrections:
  Human: Occasional backspace, re-typing
  Bot: Perfect input without corrections

分数影响: 即时文本输入(通过剪贴板或 JavaScript value 分配)分数降低 0.1-0.2。

滚动行为

reCAPTCHA 监控页面上的滚动事件:

  • 人类: 渐进式滚动,速度可变,暂停阅读
  • 机器人: 没有滚动,或即时跳转到表单区域

分数影响: 表单交互之前没有滚动事件 → -0.2 到 -0.3。

元素交互序列

reCAPTCHA 跟踪用户与哪些元素交互以及交互顺序:

  • 人类: 在页面周围单击,将鼠标悬停在链接上,在填写表格之前阅读内容
  • 机器人: 直接导航至表单字段,填写订单,提交

分数影响: 无需页面探索的直接表单行为 → -0.1 至 -0.3。


类别 3:网络信号(权重:中高)

知识产权声誉

Google 维护的 IP 声誉数据库基于:

  • 之前的 reCAPTCHA 挑战结果来自此 IP
  • 已知数据中心 IP 范围(AWS、GCP、Azure、DigitalOcean 等)
  • 已知代理/VPN 提供商范围
  • 滥用报告和垃圾邮件数据库
  • 搜索和广告欺诈信号
IP类型 典型的分数影响
住宅,低滥用 中性至+0.1
住宅,部分滥用 -0.1至-0.2
数据中心 -0.3至-0.5
已知代理/VPN -0.2至-0.4
Tor 出口节点 -0.4至-0.6
最近被标记为滥用行为 -0.3至-0.6

TLS 特征 (JA3/JA4)

TLS 握手揭示了客户端支持哪些密码套件和扩展。每个浏览器都有一个特征特征:

  • Chrome: 特定密码顺序、TLS 1.3、GREASE 扩展
  • Python 请求: 不同的密码顺序,无 GREASE,更简单的扩展列表
  • curl: 最小扩展,OpenSSL 特定模式

分数影响: 非浏览器 TLS 特征 → -0.2 至 -0.4。

HTTP 标头

reCAPTCHA 的服务器检查请求客户端的 HTTP 标头:

标头 人体指标 机器人指标
User-Agent 匹配已知的浏览器版本 版本过时,自动化工具UA
Accept-Language 填充区域设置首选项 缺失或通用
Accept-Encoding gzip, deflate, br 缺失或异常
Sec-CH-UA 客户端提示匹配浏览器 缺失(2022 年之前的标题)

类别 4:历史信号(权重:中等)

谷歌账户cookies

用户登录 Google 帐户且浏览历史记录得分较高:

  • SIDHSIDSSID cookies → 用户有 Google 会话
  • 无 Google cookie → 未知用户,起始分数较低

分数影响: 活跃 Google 会话 → +0.1 至 +0.3。

reCAPTCHA 在成功完成挑战后设置自己的 cookie:

  • _GRECAPTCHA cookie → 之前成功解决
  • rc::arc::brc::c → 风险分析数据 cookies

分数影响: 没有 reCAPTCHA cookie 的新会话 → -0.1 到 -0.2。

跨站点声誉

Google 使用相同的浏览器配置文件跟踪所有网站上的 reCAPTCHA 行为。站点 A 上的良好行为会提高站点 B 上的分数。


类别 5:环境信号(权重:低-中)

时区一致性

const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
// Should match IP geolocation
// "America/New_York" with a New York IP → consistent
// "America/New_York" with a Tokyo IP → suspicious

屏幕和窗口尺寸

screen.width, screen.height       // Physical screen
window.innerWidth, innerHeight    // Browser window
window.outerWidth, outerHeight    // Including browser chrome

分数影响: 异常尺寸(0×0、极大或完全默认)→ -0.1 至 -0.2。

电池状态(如果有)

navigator.getBattery().then(battery => {
    battery.level;    // 0.0 to 1.0
    battery.charging; // true/false
});

Battery API 提供了一个小信号——始终以 100% 充电与桌面开发环境一致。


分数诊断策略

在自动化方面获得更高分数

战略 预期影响 困难
使用真正的 Chrome(不是无头) +0.3 至 +0.5 低的
删除 navigator.userAgent 标志 +0.2 至 +0.3 低的
添加鼠标移动模拟 +0.2 至 +0.4 中等的
使用自有服务器基础设施 IP +0.2 至 +0.3 低成本)
跨会话维护 Google cookie +0.1 至 +0.2 中等的
将 TLS 特征与 Chrome 进行匹配 +0.1 至 +0.3 高的
在表单之前模拟页面探索 +0.1 至 +0.2 中等的

或者:使用 API 求解器

不要优化所有这些信号,而是使用 CaptchaAI 生成有效令牌,无论分数如何:

import requests
import time

API_KEY = "YOUR_API_KEY"

# Request a high-score token
submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": "6LcR_RsTAAAAAN_r0GEkGBfq3L7KmU5JbPHJtwNp",
    "pageurl": "https://staging.example.com/qa-login",
    "version": "v3",
    "action": "login",
    "json": 1,
})

task_id = submit.json()["request"]

for _ in range(60):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY,
        "action": "get",
        "id": task_id,
        "json": 1,
    }).json()

    if result.get("status") == 1:
        token = result["request"]
        print(f"High-score token received")
        break

求解器环境针对最高分数进行了优化——在内部处理所有浏览器、行为和网络信号。


常见问题

什么是“良好”的 reCAPTCHA v3 分数?

0.7 或更高的分数通常被认为与人类相似。大多数网站将阈值设置在 0.5 到 0.7 之间。0.9 分几乎通过了所有实现。CaptchaAI 的 API 没有 score-target 参数——分数由 Google 决定。要提高返回的分数,请在请求中附加 cookiesuserAgentproxy

使用 VPN 是否总是会降低分数?

来自数据中心的 VPN IP 通常会降低 0.2-0.4 的分数。然而,住宅 VPN 服务会产生更好的效果。分数影响取决于特定 IP 的声誉历史记录,而不是 VPN 服务本身。

为什么同一网站上不同页面的分数不同?

reCAPTCHA v3 使用 action 参数来关联分数。不同的操作(主页、登录、结账)可能有不同的基线分数。此外,行为信号会在会话期间累积——后面的页面可能得分更高,因为有更多的行为数据可用。

我可以在不拥有该网站的情况下检查我的 reCAPTCHA 分数吗?

不直接。 reCAPTCHA v3 分数仅通过 siteverify API 返回到服务器。但是,您可以通过观察网站是否在已知的 reCAPTCHA v3 实现上向您展示挑战(低分)或让您通过(高分)来估计您的分数。


概括

reCAPTCHA 分数由浏览器特征(API 存在、画布、WebGL)、行为分析(鼠标移动、键盘计时、滚动模式)、网络信誉(IP 类型、TLS 特征)、历史记录(Google cookie、以前的解决方案)和环境一致性(时区、屏幕尺寸)决定。对于需要一致高分的自动化,请使用CaptchaAI通过附加 cookiesuserAgent 和住宅 proxy 来提高 Google 返回的分数。

相关文章

该文章已禁用评论。