Explications Techniques

Analyse approfondie de l'API d'évaluation d'entreprise reCAPTCHA

reCAPTCHA Enterprise est le service CAPTCHA premium de Google qui étend reCAPTCHA v3 avec une analyse détaillée des risques, des raisons de score, des signaux de détection de fraude et des capacités de défense de compte. Contrairement à la version gratuite standard qui renvoie uniquement un score et une action, Enterprise propose des évaluations explicables avec des facteurs de risque spécifiques. Ce guide couvre l'architecture de l'API Enterprise Assessment, la structure de réponse et la manière de gérer les sites protégés par Enterprise dans le cadre de l'automatisation.


Entreprise ou reCAPTCHA standard

Caractéristique reCAPTCHA v3 (gratuit) reCAPTCHA Entreprise
Notation Note de 0,0 à 1,0 Score 0,0-1,0 + raisons du score
Analyse des risques De base Détaillé (signaux de fraude, informations sur le compte)
Raisons de notation Non fourni Raisons particulières expliquant le score
Défenseur de compte Non Oui (suit le cycle de vie du compte)
Intégration WAF Non Oui (Cloudflare, Fastly, F5)
Évaluation express Non Oui (côté serveur uniquement, pas de JS)
Détection de fuite de mot de passe Non Oui
Tarif Gratuit (1 million d'évaluations/month) 1 $ pour 1 000 évaluations (0 à 1 million gratuits)
Point de terminaison de l'API google.com/recaptcha/api/siteverify recaptchaenterprise.googleapis.com

Flux de l'API d'évaluation d'entreprise

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)

Intégration côté client

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>

Principales différences par rapport à la norme reCAPTCHA v3 :

  • L'URL du script utilise .../recaptcha/enterprise.js au lieu de .../recaptcha/api.js
  • L'objet API est grecaptcha.enterprise au lieu de grecaptcha
  • execute() renvoie le même format de jeton

Détection dans la source de la page

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://example.com/login"))

API d'évaluation côté serveur

Créer une évaluation (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

Structure de réponse à l’évaluation

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

Raisons du score d'entreprise

Enterprise fournit des raisons spécifiques expliquant pourquoi un score est faible :

Raison Descriptif Impact sur les scores
AUTOMATION Agent utilisateur automatisé ou navigateur sans tête détecté -0,3 à -0,7
UNEXPECTED_ENVIRONMENT Incohérences de l'environnement du navigateur ou de l'appareil -0,2 à -0,4
TOO_MUCH_TRAFFIC Volume de requêtes élevé à partir de cette adresse IP ou de cette session -0,1 à -0,3
UNEXPECTED_USAGE_PATTERNS Les signaux comportementaux s'écartent des normes humaines -0,2 à -0,5
LOW_CONFIDENCE_SCORE Données insuffisantes pour faire une évaluation fiable Variable
SUSPECTED_CARDING Le modèle de transaction correspond à une fraude par carte de crédit -0,3 à -0,6
SUSPECTED_CHARGEBACK Risque de rétrofacturation basé sur les signaux de transaction -0,2 à -0,4

Motifs du verdict étendu (détails supplémentaires)

Raison Descriptif
BROWSER_ERROR Erreurs d'exécution JavaScript dans le SDK CAPTCHA
SITE_MISMATCH Jeton créé pour un site différent de celui validé sur
FAILED_TWO_FACTOR L'authentification à deux facteurs a récemment échoué

Défenseur de compte

Account Defender d'Enterprise suit les comptes d'utilisateurs tout au long de leur cycle de vie :

{
    "accountDefenderAssessment": {
        "labels": [
            "PROFILE_MATCH",
            "SUSPICIOUS_LOGIN_ACTIVITY",
            "SUSPICIOUS_ACCOUNT_CREATION",
            "RELATED_ACCOUNTS_NUMBER_HIGH"
        ]
    }
}
Étiquette Signification
PROFILE_MATCH Le comportement correspond au profil connu pour ce compte
SUSPICIOUS_LOGIN_ACTIVITY Le modèle de connexion s’écarte de la normale (nouvel appareil, emplacement)
SUSPICIOUS_ACCOUNT_CREATION La création de compte semble automatisée
RELATED_ACCOUNTS_NUMBER_HIGH Plusieurs comptes liés au même appareil/session

Intégration WAF

reCAPTCHA Enterprise s'intègre aux fournisseurs WAF pour ajouter des défis CAPTCHA à la périphérie du réseau :

Intégration 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

Intégration 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

Gestion du reCAPTCHA d'entreprise dans l'automatisation

CaptchaAI résout Enterprise de la même manière que le reCAPTCHA standard

Du point de vue du solveur d'API, les jetons reCAPTCHA Enterprise fonctionnent de la même manière que les jetons reCAPTCHA standards :

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

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

Comment détecter Enterprise vs standard sur une page cible

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"

Dépannage d'entreprise

Problème Diagnostic Solution
Jeton rejeté par l'API Enterprise Utilisation de la méthode standard pour le site Enterprise Ajouter enterprise=1 à la demande du solveur
Score toujours 0,1 malgré un jeton valide Incompatibilité des paramètres d'action Vérifiez que le action correspond à ce que la page envoie
"SITE_MISMATCH" dans les motifs Jeton généré pour un mauvais domaine Assurez-vous que pageurl correspond exactement à la cible
"AUTOMATION" dans les raisons de score Environnement du solveur détecté CaptchaAI gère cela - si cela persiste, contactez le support
Jeton valide mais le site bloque toujours Le site utilise des vérifications supplémentaires au-delà du CAPTCHA Recherchez d'autres couches de détection de robots (WAF, empreinte digitale)

Questions fréquemment posées

reCAPTCHA Enterprise est-il plus difficile à résoudre que reCAPTCHA standard ?

Le processus de génération de jetons est le même. Enterprise ajoute des fonctionnalités d'analyse côté serveur (raisons de score, Account Defender) mais le défi côté client est identique. Les solveurs d'API génèrent des jetons pour Enterprise de la même manière qu'ils le font pour les versions standard.

Ai-je besoin d'un compte Google Cloud pour résoudre les CAPTCHA d'entreprise ?

Non. En tant que développeur d'automatisation résolvant des CAPTCHA d'entreprise sur des sites Web cibles, vous n'avez besoin que du sitekey de la page et d'un solveur d'API tel que CaptchaAI. Le compte Google Cloud est nécessaire à l'opérateur du site Web pour valider les évaluations, et non au solveur CAPTCHA.

Comment puis-je savoir si un site utilise Enterprise ou reCAPTCHA standard ?

Vérifiez l'URL du script. Enterprise utilise recaptcha/enterprise.js tandis que standard utilise recaptcha/api.js. Le nom de l'objet API JavaScript diffère également : grecaptcha.enterprise.execute() vs grecaptcha.execute().

Les raisons du score Enterprise peuvent-elles être utilisées pour améliorer mon automatisation ?

Si vous exploitez le site cible (en testant votre propre implémentation CAPTCHA), oui – les raisons vous indiquent quels signaux de détection ont été déclenchés. Si vous résolvez des CAPTCHA sur des sites tiers, les raisons ne vous sont pas visibles — seul l'opérateur du site les voit.


Résumé

reCAPTCHA Enterprise étend reCAPTCHA standard avec une analyse détaillée des risques, des raisons de score, Account Defender et une intégration WAF. Du point de vue de l'automatisation, les CAPTCHA d'entreprise sont résolus de la même manière que les reCAPTCHA standard : ajoutez le paramètre enterprise=1 à votreCaptchaAIRequête API. Détectez Enterprise en recherchant recaptcha/enterprise.js dans la source de la page. La principale différence opérationnelle est de garantir que vous transmettez le bon indicateur enterprise et le paramètre action correspondant.

Articles connexes

Les commentaires sont désactivés pour cet article.