Skor reCAPTCHA di situs target tiba-tiba anjlok padahal browser dan proxy Anda tidak berubah? Kemungkinan besar situs itu baru pindah ke reCAPTCHA Enterprise.
Enterprise menambahkan alasan skor, analisis risiko terperinci, dan Account Defender di atas reCAPTCHA v3 biasa — tanpa mengubah cara token dibuat di sisi klien. Panduan ini membedah struktur request/response-nya, arti tiap alasan skor, dan cara menyelesaikannya dengan CaptchaAI.
reCAPTCHA Enterprise vs reCAPTCHA v3 gratis
Tantangan yang dilihat pengguna sama — bedanya ada di analisis Google di baliknya:
| Fitur | reCAPTCHA v3 (gratis) | reCAPTCHA Enterprise |
|---|---|---|
| Skor | skor 0.0–1.0 | Skor 0.0–1.0 + alasan skor |
| Analisis risiko | Dasar | Terperinci (sinyal penipuan, info akun) |
| Alasan skor | Tidak disediakan | Alasan spesifik yang menjelaskan skor tersebut |
| Account Defender | Tidak | Ya (melacak siklus hidup akun) |
| Integrasi WAF | Tidak | Ya (Cloudflare, Fastly, F5) |
| Penilaian cepat (Express) | Tidak | Ya (hanya sisi server, tanpa JS) |
| Deteksi kebocoran kata sandi | Tidak | Ya |
| Harga | Gratis (1 juta penilaian/bulan) | $1 per 1000 penilaian (gratis 0-1 juta) |
| API endpoint | google.com/recaptcha/api/siteverify | recaptchaenterprise.googleapis.com |
Fitur tambahan berjalan di sisi Google, bukan di sisi solver — baris API endpoint paling relevan buat deteksi.
Alur kerja API Penilaian Enterprise
Enterprise membagi tanggung jawab ke dua tahap: token dibuat di browser, penilaian risiko dihitung di server operator situs.
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)
Integrasi reCAPTCHA Enterprise di sisi klien
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>
Perbedaan utamanya dari reCAPTCHA v3 standar:
| Aspek | reCAPTCHA v3 standar | reCAPTCHA Enterprise |
|---|---|---|
| URL skrip | .../recaptcha/api.js |
.../recaptcha/enterprise.js |
| Objek API | grecaptcha |
grecaptcha.enterprise |
Format token dari execute() |
sama | sama |
Mendeteksi reCAPTCHA Enterprise dari kode sumber
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 Penilaian di sisi server
Membuat assessment lewat Google Cloud API
Implementasinya di Python:
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
Tiga field wajib: site_key, token, expected_action (harus sama dengan action di sisi klien).
Struktur respons penilaian
Responsnya:
{
"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"]
}
}
Hanya operator situs yang melihat objek ini — solver seperti CaptchaAI cuma berurusan dengan token dari
res.php.
Account Defender: melacak siklus hidup akun
accountDefenderAssessment melacak akun pengguna sepanjang siklus hidupnya, bukan hanya satu sesi login:
{
"accountDefenderAssessment": {
"labels": [
"PROFILE_MATCH",
"SUSPICIOUS_LOGIN_ACTIVITY",
"SUSPICIOUS_ACCOUNT_CREATION",
"RELATED_ACCOUNTS_NUMBER_HIGH"
]
}
}
| Label | Artinya |
|---|---|
PROFILE_MATCH |
Perilaku cocok dengan profil yang dikenal untuk akun ini |
SUSPICIOUS_LOGIN_ACTIVITY |
Pola login menyimpang dari kebiasaan (perangkat baru, lokasi baru) |
SUSPICIOUS_ACCOUNT_CREATION |
Pembuatan akun terindikasi otomatis |
RELATED_ACCOUNTS_NUMBER_HIGH |
Banyak akun tertaut ke perangkat atau sesi yang sama |
Alasan skor Enterprise
Selain label akun, Enterprise memberi alasan spesifik kenapa skor sebuah sesi rendah.
| Alasan | Deskripsi | Dampak skor |
|---|---|---|
AUTOMATION |
User agent otomatis atau browser headless terdeteksi | -0.3 hingga -0.7 |
UNEXPECTED_ENVIRONMENT |
Ketidaksesuaian lingkungan browser atau perangkat | -0.2 hingga -0.4 |
TOO_MUCH_TRAFFIC |
Volume permintaan tinggi dari IP atau sesi ini | -0.1 hingga -0.3 |
UNEXPECTED_USAGE_PATTERNS |
Sinyal perilaku menyimpang dari pola manusia normal | -0.2 hingga -0.5 |
LOW_CONFIDENCE_SCORE |
Data tidak cukup untuk penilaian yang meyakinkan | Bervariasi |
SUSPECTED_CARDING |
Pola transaksi cocok dengan penipuan kartu kredit | -0.3 hingga -0.6 |
SUSPECTED_CHARGEBACK |
Risiko tolak bayar berdasarkan sinyal transaksi | -0.2 hingga -0.4 |
Alasan putusan lanjutan (detail tambahan):
| Alasan | Deskripsi |
|---|---|
BROWSER_ERROR |
Kesalahan eksekusi JavaScript di CAPTCHA SDK |
SITE_MISMATCH |
Token dibuat untuk situs yang berbeda dari yang divalidasi |
FAILED_TWO_FACTOR |
Autentikasi dua faktor gagal baru-baru ini |
Integrasi dengan WAF
Enterprise terhubung dengan penyedia WAF untuk menampilkan tantangan CAPTCHA di tepi jaringan:
| Penyedia WAF | Titik pemicu | Yang memvalidasi |
|---|---|---|
| Cloudflare | Edge, sebelum origin | WAF rule + Enterprise API |
| F5 BIG-IP | iRule / policy | Enterprise API sisi server |
Integrasi Cloudflare WAF
Alurnya:
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
Integrasi F5 BIG-IP
Polanya serupa:
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
Implikasinya: token yang Anda hasilkan tetap sama, siapa pun penyedia WAF-nya.
Menyelesaikan reCAPTCHA Enterprise dengan CaptchaAI
Dari perspektif solver API, token reCAPTCHA Enterprise dibuat dan dikirim dengan cara yang persis sama seperti token reCAPTCHA standar. Anda hanya menambahkan satu flag ke request:
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
Satu-satunya baris baru dibanding request reCAPTCHA v2 biasa adalah "enterprise": 1 — sisanya identik.
Node.js
Versi Node.js-nya:
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");
}
Mendeteksi versi reCAPTCHA di halaman target
Fungsi bantunya:
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"
Skenario umum: freelancer price-monitoring lokal (Upwork/Fastwork) melihat skor klien anjlok setelah situs upgrade ke Enterprise — solusinya tetap enterprise=1.
Troubleshooting reCAPTCHA Enterprise
Masalah yang paling sering muncul dan solusinya:
| Masalah | Diagnosis | Solusi |
|---|---|---|
| Token ditolak oleh Enterprise API | Memakai method standar untuk situs Enterprise | Tambahkan enterprise=1 ke request solver |
| Skor selalu 0.1 meski token valid | Parameter action tidak cocok |
Pastikan action sama persis dengan yang dikirim halaman |
SITE_MISMATCH muncul sebagai alasan |
Token dibuat untuk domain yang salah | Pastikan pageurl sama persis dengan target |
AUTOMATION muncul di alasan skor |
Lingkungan solver terdeteksi | CaptchaAI sudah menangani ini — kalau masih terjadi, hubungi support |
| Token valid tapi situs tetap memblokir | Situs punya pemeriksaan tambahan di luar CAPTCHA | Periksa lapisan deteksi bot lain (WAF, sinyal browser) |
Pertanyaan yang sering diajukan
Apakah CaptchaAI bisa menyelesaikan reCAPTCHA Enterprise?
Bisa. Tokennya dibuat lewat proses yang sama seperti reCAPTCHA v2/v3 biasa — Anda hanya menambahkan parameter enterprise=1 ke request in.php. Analisis risiko tambahan Enterprise berjalan di sisi Google setelah token terkirim, bukan di sisi solver.
Skor klien saya tiba-tiba anjlok padahal setup tidak berubah, kenapa?
Situs kemungkinan pindah ke reCAPTCHA Enterprise. Cirinya: skrip berganti ke recaptcha/enterprise.js, bukan recaptcha/api.js. Solusinya sama, tambahkan enterprise=1 ke request.
Berapa lama waktu penyelesaian reCAPTCHA Enterprise lewat API?
Tantangan sisi klien reCAPTCHA v2 Enterprise identik dengan reCAPTCHA v2 biasa, jadi SLA-nya sama: di bawah 60 detik, tingkat keberhasilan tinggi. Varian reCAPTCHA v3 Enterprise biasanya selesai di bawah 4 detik.
Apa beda biaya reCAPTCHA Enterprise dari Google dengan biaya CaptchaAI?
Dua tagihan berbeda, ke pihak berbeda. Biaya Enterprise ($1 per 1000 penilaian, gratis sampai 1 juta/bulan) dibayar pemilik situs ke Google. Biaya CaptchaAI dibayar Anda — per thread, bukan per solve, jadi BASIC ($15/bulan, 5 thread) sudah memberi solve tanpa batas.
Bisakah saya melihat alasan skor Enterprise untuk situs milik orang lain?
Tidak. Hanya operator situs yang membuat assessment-nya sendiri yang melihat alasan seperti AUTOMATION. Di situs pihak ketiga Anda cuma berurusan dengan token.
Ringkasan
reCAPTCHA Enterprise menambahkan alasan skor, Account Defender, dan integrasi WAF di atas reCAPTCHA standar — tapi tokennya diselesaikan dengan cara identik. Tambahkan enterprise=1 ke request CaptchaAI, dan solver menangani sisanya. Deteksi Enterprise lewat recaptcha/enterprise.js di sumber halaman, lalu pastikan flag enterprise dan action sudah benar.
Artikel Terkait
- Cara menyelesaikan callback reCAPTCHA v2 lewat API
- Menangani Turnstile dan reCAPTCHA v2 di situs yang sama
- Cara menyelesaikan reCAPTCHA v3 Enterprise lewat API