深度解析

reCAPTCHA 企业评估 API 深入探讨

reCAPTCHA Enterprise 是 Google 的高级验证码服务,它通过详细的风险分析、评分原因、欺诈检测信号和帐户防护功能扩展了 reCAPTCHA v3。与仅返回分数和操作的标准免费版本不同,Enterprise 提供具有特定风险因素的可解释评估。本指南涵盖企业评估 API 架构、响应结构以及如何自动化处理受企业保护的站点。


企业版与标准版 reCAPTCHA

特征 reCAPTCHA v3(免费) reCAPTCHA 企业版
评分 0.0-1.0分 0.0-1.0分+评分理由
风险分析 基本的 详细(欺诈信号、帐户信息)
评分原因 未提供 具体得分原因解释
账户守护者 是(跟踪帐户生命周期)
WAF 集成 是(Cloudflare、Fastly、F5)
快速评估 是(仅服务器端,无 JS)
密码泄露检测 是的
定价 免费(100 万次评估/month) 每 1000 次评估 1 美元(0-100 万免费)
API端点 google.com/recaptcha/api/siteverify recaptchaenterprise.googleapis.com

企业评估 API 流程

Client-side:

  1. Load reCAPTCHA Enterprise script
  2. Call grecaptcha.enterprise.execute(SITE_KEY, {action: 'LOGIN'})
  3. Receive token
  4. Send token to your backend

Server-side:

  1. Create assessment via Enterprise API
  2. Receive detailed risk analysis
  3. Make access decision based on score + reasons
  4. Optionally annotate the assessment (report fraud/legitimate)

客户端集成

JavaScript SDK

<script src="https://www.google.com/recaptcha/enterprise.js?render=SITE_KEY"></script>
<script>
    grecaptcha.enterprise.ready(function() {
        grecaptcha.enterprise.execute('SITE_KEY', { action: 'LOGIN' })
            .then(function(token) {
                // Send token to backend
                fetch('/api/verify', {
                    method: 'POST',
                    headers: { 'Content-Type': 'application/json' },
                    body: JSON.stringify({ token: token })
                });
            });
    });
</script>

与标准 reCAPTCHA v3 的主要区别:

  • 脚本 URL 使用 .../recaptcha/enterprise.js 而不是 .../recaptcha/api.js
  • API 对象是 grecaptcha.enterprise 而不是 grecaptcha
  • execute() 返回相同的令牌格式

页面源中检测

import requests
import re

def detect_recaptcha_enterprise(url):
    """Detect if a page uses reCAPTCHA Enterprise."""
    html = requests.get(url, timeout=10).text

    indicators = {
        "is_enterprise": False,
        "is_standard": False,
        "site_key": None,
        "actions": [],
    }

    # Enterprise detection
    if "recaptcha/enterprise.js" in html:
        indicators["is_enterprise"] = True
        match = re.search(r"render=([A-Za-z0-9_-]+)", html)
        if match:
            indicators["site_key"] = match.group(1)

    # Standard v3 detection
    elif "recaptcha/api.js?render=" in html:
        indicators["is_standard"] = True
        match = re.search(r"render=([A-Za-z0-9_-]+)", html)
        if match:
            indicators["site_key"] = match.group(1)

    # Extract action names
    actions = re.findall(r"action:\s*['\"](\w+)['\"]", html)
    indicators["actions"] = list(set(actions))

    return indicators

print(detect_recaptcha_enterprise("https://staging.example.com/qa-login"))

服务器端评估API

创建评估 (Google Cloud API)

from google.cloud import recaptchaenterprise_v1
from google.cloud.recaptchaenterprise_v1 import Assessment

def create_assessment(project_id, site_key, token, action):
    """Create a reCAPTCHA Enterprise assessment."""
    client = recaptchaenterprise_v1.RecaptchaEnterpriseServiceClient()

    event = recaptchaenterprise_v1.Event()
    event.site_key = site_key
    event.token = token
    event.expected_action = action

    assessment = recaptchaenterprise_v1.Assessment()
    assessment.event = event

    request = recaptchaenterprise_v1.CreateAssessmentRequest()
    request.assessment = assessment
    request.parent = f"projects/{project_id}"

    response = client.create_assessment(request)
    return response

评估响应结构

{
    "name": "projects/123456/assessments/abcdef123",
    "event": {
        "token": "...",
        "siteKey": "6Le...",
        "expectedAction": "LOGIN",
        "hashedAccountId": "abc123..."
    },
    "riskAnalysis": {
        "score": 0.9,
        "reasons": [
            "AUTOMATION",
            "TOO_MUCH_TRAFFIC"
        ],
        "extendedVerdictReasons": [
            "BROWSER_ERROR"
        ]
    },
    "tokenProperties": {
        "valid": true,
        "hostname": "example.com",
        "action": "LOGIN",
        "createTime": "2025-01-15T10:30:00Z",
        "invalidReason": ""
    },
    "accountDefenderAssessment": {
        "labels": ["PROFILE_MATCH"]
    }
}

企业评分原因

Enterprise 提供了得分较低的具体原因:

原因 描述 分数影响
AUTOMATION 检测到自动用户代理或无头浏览器 -0.3至-0.7
UNEXPECTED_ENVIRONMENT 浏览器或设备环境不一致 -0.2至-0.4
TOO_MUCH_TRAFFIC 来自此 IP 或会话的高请求量 -0.1至-0.3
UNEXPECTED_USAGE_PATTERNS 行为信号偏离人类规范 -0.2至-0.5
LOW_CONFIDENCE_SCORE 数据不足,无法做出自信的评估 多变的
SUSPECTED_CARDING 交易模式与信用卡欺诈相符 -0.3至-0.6
SUSPECTED_CHARGEBACK 基于交易信号的退款风险 -0.2至-0.4

扩展判决理由(附加细节)

原因 描述
BROWSER_ERROR CAPTCHA SDK 中 JavaScript 执行错误
SITE_MISMATCH 为不同站点创建的令牌与验证的站点不同
FAILED_TWO_FACTOR 最近双因素身份验证失败

账户卫士

Enterprise 的 Account Defender 在整个生命周期中跟踪用户帐户:

{
    "accountDefenderAssessment": {
        "labels": [
            "PROFILE_MATCH",
            "SUSPICIOUS_LOGIN_ACTIVITY",
            "SUSPICIOUS_ACCOUNT_CREATION",
            "RELATED_ACCOUNTS_NUMBER_HIGH"
        ]
    }
}
标签 意义
PROFILE_MATCH 行为与该帐户的已知配置文件匹配
SUSPICIOUS_LOGIN_ACTIVITY 登录模式偏离正常(新设备、位置)
SUSPICIOUS_ACCOUNT_CREATION 帐户创建看起来是自动化的
RELATED_ACCOUNTS_NUMBER_HIGH 多个帐户链接到同一设备/session

WAF集成

reCAPTCHA Enterprise 与 WAF 提供商集成,在网络边缘添加 CAPTCHA 挑战:

Cloudflare WAF 集成

Request arrives at Cloudflare edge
    ↓
Cloudflare WAF rule evaluates request
    ↓
Rule triggers reCAPTCHA Enterprise challenge
    ↓
Client solves CAPTCHA → token returned
    ↓
Cloudflare validates token via Enterprise API
    ↓
If valid + score above threshold → request forwarded to origin

F5 BIG-IP 集成

F5 iRule or policy evaluates request
    ↓
Triggers reCAPTCHA Enterprise challenge page
    ↓
Client solves → token validated server-side
    ↓
F5 forwards or blocks based on assessment score

自动化处理企业 reCAPTCHA

CaptchaAI 以与标准 reCAPTCHA 相同的方式解决 Enterprise 问题

从 API 求解器的角度来看,reCAPTCHA Enterprise 令牌的工作方式与标准 reCAPTCHA 令牌相同:

import requests
import time

API_KEY = "YOUR_API_KEY"

# Enterprise is solved with the same method
# The solver handles the Enterprise variant automatically
submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": "6LcR_RsTAAAAAN_r0GEkGBfq3L7KmU5JbPHJtwNp",
    "pageurl": "https://enterprise-site.com/login",
    "enterprise": 1,  # Flag for Enterprise variant
    "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"Enterprise token: {token[:50]}...")
        break

Node.js

const axios = require("axios");

async function solveEnterprise(sitekey, pageurl) {
    const API_KEY = "YOUR_API_KEY";

    const { data: submit } = await axios.post(
        "https://ocr.captchaai.com/in.php",
        new URLSearchParams({
            key: API_KEY,
            method: "userrecaptcha",
            googlekey: sitekey,
            pageurl: pageurl,
            enterprise: 1,
            json: 1,
        })
    );

    const taskId = submit.request;

    for (let i = 0; i < 60; i++) {
        await new Promise(r => setTimeout(r, 5000));
        const { data: result } = await axios.get(
            "https://ocr.captchaai.com/res.php",
            { params: { key: API_KEY, action: "get", id: taskId, json: 1 } }
        );

        if (result.status === 1) return result.request;
    }

    throw new Error("Timeout");
}

如何在目标页面上检测企业版与标准版

def identify_recaptcha_version(html):
    """Determine which reCAPTCHA version a page uses."""
    if "recaptcha/enterprise.js" in html:
        return "enterprise"
    elif "recaptcha/api.js?render=" in html:
        return "v3"
    elif "g-recaptcha" in html and 'data-size="invisible"' in html:
        return "v2_invisible"
    elif "g-recaptcha" in html:
        return "v2"
    else:
        return "none"

企业故障排除

问题 诊断 解决方案
令牌被企业 API 拒绝 使用企业网站的标准方法 enterprise=1 添加到求解器请求
尽管令牌有效,但得分始终为 0.1 动作参数不匹配 验证 action 与页面发送的内容匹配
原因中的“SITE_MISMATCH” 为错误的域生成的令牌 确保 pageurl 与目标完全匹配
得分原因中的“自动化” 检测到解算器环境 CaptchaAI 处理此问题 — 如果持续存在,请联系支持人员
令牌有效,但网站仍然被阻止 网站使用验证码之外的其他检查 检查其他机器人检测层(WAF、特征)

常见问题

reCAPTCHA Enterprise 是否比标准 reCAPTCHA 更难解决?

令牌生成过程是相同的。 Enterprise 添加了服务器端分析功能(分数原因、Account Defender),但客户端挑战是相同的。 API 求解器为 Enterprise 生成令牌的方式与为标准版本生成令牌的方式相同。

我是否需要 Google Cloud 帐户来解决企业验证码?

不需要。作为在目标网站上解决企业验证码的自动化开发人员,您只需要页面中的 sitekey 和 CaptchaAI 等 API 求解器。网站运营商需要 Google Cloud 帐户来验证评估,而不是 CAPTCHA 求解器。

如何判断网站使用的是企业版还是标准版 reCAPTCHA?

检查脚本 URL。企业版使用 recaptcha/enterprise.js,标准版使用 recaptcha/api.js。 JavaScript API 对象名称也有所不同:grecaptcha.enterprise.execute()grecaptcha.execute()

Enterprise 评分原因可以用来提高我的自动化程度吗?

如果您操作目标站点(测试您自己的验证码实施),是的 - 原因会告诉您触发了哪些检测信号。如果您在第三方网站上解决验证码,则您看不到原因 - 只有网站运营商可以看到它们。


概括

reCAPTCHA Enterprise 通过详细的风险分析、评分原因、Account Defender 和 WAF 集成扩展了标准 reCAPTCHA。从自动化的角度来看,企业验证码的解决方式与标准 reCAPTCHA 相同 - 将 enterprise=1 参数添加到您的CaptchaAIAPI 请求。通过检查页面源中的 recaptcha/enterprise.js 来检测 Enterprise。关键的操作差异是确保您传递正确的 enterprise 标志和匹配的 action 参数。

相关文章

该文章已禁用评论。