Explainers

Cara kerja API Penilaian reCAPTCHA Enterprise

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

Komentar dinonaktifkan untuk artikel ini.