Análises Técnicas

Aprofundamento da API de avaliação empresarial reCAPTCHA

reCAPTCHA Enterprise é o serviço CAPTCHA premium do Google que estende o reCAPTCHA v3 com análise de risco detalhada, motivos de pontuação, sinais de detecção de fraude e recursos de defesa de conta. Ao contrário da versão gratuita padrão que retorna apenas pontuação e ação, o Enterprise fornece avaliações explicáveis ​​com fatores de risco específicos. Este guia aborda a arquitetura da API de avaliação empresarial, a estrutura de resposta e como lidar com sites protegidos pela empresa em automação.


ReCAPTCHA empresarial vs padrão

Recurso reCAPTCHA v3 (grátis) reCAPTCHA Empresarial
Pontuação Pontuação 0,0-1,0 Pontuação 0,0-1,0 + motivos da pontuação
Análise de risco Básico Detalhado (sinais de fraude, informações da conta)
Motivos da pontuação Não fornecido Razões específicas que explicam a pontuação
Defensor da conta Não Sim (rastreia o ciclo de vida da conta)
Integração WAF Não Sim (Cloudflare, Rapidamente, F5)
Avaliação expressa Não Sim (apenas no lado do servidor, sem JS)
Detecção de vazamento de senha Não Sim
Preços Grátis (1 milhão de avaliações/month) US$ 1 por 1.000 avaliações (0-1 milhão grátis)
Endpoint da API google.com/recaptcha/api/siteverify recaptchaenterprise.googleapis.com

Fluxo da API de avaliação empresarial

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)

Integração do lado do cliente

SDK JavaScript

<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>

Principais diferenças do padrão reCAPTCHA v3:

  • URL do script usa .../recaptcha/enterprise.js em vez de .../recaptcha/api.js
  • O objeto API é grecaptcha.enterprise em vez de grecaptcha
  • execute() retorna o mesmo formato de token

Detecção na origem da página

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 de avaliação do lado do servidor

Como criar uma avaliação (API Google Cloud)

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

Estrutura de resposta de avaliação

{
    "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"]
    }
}

Razões de pontuação empresarial

A empresa fornece motivos específicos que explicam por que uma pontuação é baixa:

Razão Descrição Impacto na pontuação
AUTOMATION Agente de usuário automatizado ou navegador headless detectado -0,3 a -0,7
UNEXPECTED_ENVIRONMENT Inconsistências no ambiente do navegador ou do dispositivo -0,2 a -0,4
TOO_MUCH_TRAFFIC Alto volume de solicitações deste IP ou sessão -0,1 a -0,3
UNEXPECTED_USAGE_PATTERNS Sinais comportamentais desviam-se das normas humanas -0,2 a -0,5
LOW_CONFIDENCE_SCORE Dados insuficientes para fazer uma avaliação confiável Variável
SUSPECTED_CARDING O padrão de transação corresponde a fraude de cartão de crédito -0,3 a -0,6
SUSPECTED_CHARGEBACK Risco de estorno com base em sinais de transação -0,2 a -0,4

Razões estendidas do veredicto (detalhes adicionais)

Razão Descrição
BROWSER_ERROR Erros de execução de JavaScript no CAPTCHA SDK
SITE_MISMATCH Token criado para site diferente do validado em
FAILED_TWO_FACTOR A autenticação de dois fatores falhou recentemente

Defensor da conta

O Account Defender da Enterprise rastreia contas de usuários em todo o seu ciclo de vida:

{
    "accountDefenderAssessment": {
        "labels": [
            "PROFILE_MATCH",
            "SUSPICIOUS_LOGIN_ACTIVITY",
            "SUSPICIOUS_ACCOUNT_CREATION",
            "RELATED_ACCOUNTS_NUMBER_HIGH"
        ]
    }
}
Etiqueta Significado
PROFILE_MATCH O comportamento corresponde ao perfil conhecido desta conta
SUSPICIOUS_LOGIN_ACTIVITY O padrão de login difere do normal (novo dispositivo, localização)
SUSPICIOUS_ACCOUNT_CREATION A criação de conta parece automatizada
RELATED_ACCOUNTS_NUMBER_HIGH Várias contas vinculadas ao mesmo dispositivo/session

Integração WAF

O reCAPTCHA Enterprise integra-se com provedores WAF para adicionar desafios CAPTCHA na borda da rede:

Integração WAF da Cloudflare

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

Integração 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

Lidando com o Enterprise reCAPTCHA na automação

CaptchaAI resolve Enterprise da mesma forma que o reCAPTCHA padrão

Do ponto de vista do solucionador de API, os tokens reCAPTCHA Enterprise funcionam de forma idêntica aos tokens reCAPTCHA padrão:

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");
}

Como detectar Enterprise vs Standard em uma página de destino

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"

Solução de problemas empresariais

Problema Diagnóstico Solução
Token rejeitado pela API Enterprise Usando o método padrão para site corporativo Adicione enterprise=1 à solicitação do solucionador
Pontuação sempre 0,1 apesar do token válido Incompatibilidade de parâmetro de ação Verifique se action corresponde ao que a página envia
"SITE_MISMATCH" nos motivos Token gerado para domínio errado Certifique-se de que pageurl corresponda exatamente ao alvo
"AUTOMAÇÃO" em motivos de pontuação Ambiente do Solver detectado CaptchaAI cuida disso – se persistir, entre em contato com o suporte
Token válido, mas o site ainda bloqueia O site usa verificações adicionais além do CAPTCHA Verifique outras camadas de detecção de bot (WAF, sinal de navegador)

Perguntas frequentes

O reCAPTCHA Enterprise é mais difícil de resolver do que o reCAPTCHA padrão?

O processo de geração de token é o mesmo. A empresa adiciona recursos de análise do lado do servidor (motivos de pontuação, Account Defender), mas o desafio do lado do cliente é idêntico. Os solucionadores de API geram tokens para o Enterprise da mesma forma que fazem para as versões padrão.

Preciso de uma conta do Google Cloud para resolver CAPTCHAs empresariais?

Não. Como desenvolvedor de automação que resolve CAPTCHAs empresariais em sites de destino, você só precisa do sitekey da página e de um solucionador de API como CaptchaAI. A conta do Google Cloud é necessária ao operador do site para validar as avaliações, não ao solucionador CAPTCHA.

Como posso saber se um site usa o Enterprise ou o reCAPTCHA padrão?

Verifique o URL do script. A empresa usa recaptcha/enterprise.js enquanto o padrão usa recaptcha/api.js. O nome do objeto da API JavaScript também é diferente: grecaptcha.enterprise.execute() vs grecaptcha.execute().

Os motivos da pontuação empresarial podem ser usados para aprimorar minha automação?

Se você opera o site de destino (testando sua própria implementação de CAPTCHA), sim – os motivos informam quais sinais de detecção foram acionados. Se você estiver resolvendo CAPTCHAs em sites de terceiros, os motivos não serão visíveis para você – apenas o operador do site os verá.


Resumo

O reCAPTCHA Enterprise estende o reCAPTCHA padrão com análise de risco detalhada, motivos de pontuação, Account Defender e integração WAF. Do ponto de vista da automação, os Enterprise CAPTCHAs são resolvidos de forma idêntica ao reCAPTCHA padrão — adicione o parâmetro enterprise=1 ao seuCaptchaAISolicitação de API. Detecte o Enterprise verificando recaptcha/enterprise.js na origem da página. A principal diferença operacional é garantir que você passe o sinalizador enterprise correto e o parâmetro action correspondente.

Artigos relacionados

Os comentários estão desativados para este artigo.