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.jsau lieu de.../recaptcha/api.js - L'objet API est
grecaptcha.enterpriseau lieu degrecaptcha 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
- Comment résoudre le rappel Recaptcha V2 à l'aide de l'API
- Gestion du tourniquet Recaptcha V2 sur le même site
- Comment résoudre Recaptcha V3 Enterprise à l'aide de l'API