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 |
undefined 或 false |
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 帐户且浏览历史记录得分较高:
SID、HSID、SSIDcookies → 用户有 Google 会话- 无 Google cookie → 未知用户,起始分数较低
分数影响: 活跃 Google 会话 → +0.1 至 +0.3。
reCAPTCHA cookie
reCAPTCHA 在成功完成挑战后设置自己的 cookie:
_GRECAPTCHAcookie → 之前成功解决rc::a、rc::b、rc::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 决定。要提高返回的分数,请在请求中附加 cookies、userAgent 和 proxy。
使用 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通过附加 cookies、userAgent 和住宅 proxy 来提高 Google 返回的分数。
相关文章
- 如何使用Api解决Recaptcha V3 Enterprise
- Recaptcha V3 最低分数阈值
- Recaptcha V3 企业版与标准版