Comparisons

Cloudflare Bot Management vs Turnstile: Memahami Perbedaannya

Jawaban singkatnya: keduanya produk Cloudflare berbeda dan ditangani berbeda pula. Banyak developer scraping menyamakannya, lalu bingung kenapa "solve Turnstile" tidak cukup. Tiga hal yang perlu Anda pegang:

  • Turnstile — widget CAPTCHA gratis pada satu halaman; bisa Anda selesaikan langsung lewat API.
  • Bot Management — pertahanan tingkat jaringan berbayar (paket Enterprise) yang menilai setiap request sebelum sampai ke server; CAPTCHA hanya salah satu lapisannya.
  • Salah membaca yang aktif berarti salah metode — identifikasi dulu.

Perbandingan cepat

Beda arsitektur inilah yang menentukan seberapa berat pekerjaan otomasi Anda.

Fitur Bot Management Turnstile
Apa itu Platform pertahanan bot perusahaan Widget CAPTCHA gratis
Harga Paket perusahaan ($$$) Gratis untuk semua paket
Penerapan Tingkat jaringan (proxy Cloudflare) Widget JavaScript (disematkan di halaman)
Memerlukan DNS Cloudflare Ya Tidak (berfungsi di situs mana pun)
Tantangan yang terlihat Terkadang (managed challenge) Jarang (kebanyakan invisible)
Cakupan deteksi Semua request ke domain Aksi halaman tertentu (submit form, dll.)
Bot score 1-99 (per request) Pass/fail (per tantangan)
Integrasi WAF Ya (aturan berdasarkan bot score) Tidak
JavaScript challenge Ya (halaman tunggu 5 detik) Ya (proof-of-work di latar belakang)
Rate limiting Ya Tidak
Dukungan CaptchaAI Via metode Cloudflare Turnstile/Challenge Ya (tingkat keberhasilan tinggi)

Bot Management: pertahanan di level jaringan

Bagian dari paket Enterprise Cloudflare, Bot Management bekerja di tingkat jaringan — setiap request dievaluasi sebelum mencapai server asal. Ini bukan widget yang bisa "diselesaikan", melainkan kumpulan sinyal yang jadi skor.

Cara kerja Bot Management

Request arrives at Cloudflare edge
    ↓
Bot Management engine evaluates:
  ├─ Machine learning model (behavioral sinyal browser)
  ├─ Heuristics (known bot patterns)
  ├─ JavaScript sinyal browser (if JS challenge triggered)
  ├─ JA3/JA4 TLS sinyal browser
  ├─ HTTP header analysis
  └─ IP reputation (Cloudflare sees ~20% of internet traffic)
    ↓
Bot score assigned: 1 (definitely bot) to 99 (definitely human)
    ↓
WAF rules act on the score:

  - Score > 50 → Allow
  - Score 30-50 → Managed challenge
  - Score < 30 → Block or JavaScript challenge

Komponen yang membentuknya

Beberapa bagian bekerja sama: Bot Score (skor ML per request), Managed Challenge (menampilkan JS challenge atau Turnstile secara adaptif), Super Bot Fight Mode (versi ringkas di tingkat Cloudflare berbayar non-Enterprise), Bot Analytics, WAF Custom Rules, Rate Limiting, dan JavaScript Detection.

Yang ditemui otomasi

Saat situs memakai Bot Management, request otomatis bisa berujung pada salah satu dari empat hasil:

  • Block langsung (403) — bot score sangat rendah, WAF rule memblokir.
  • Halaman JavaScript challenge — "Checking your browser" selama 5 detik.
  • Managed challenge — widget Turnstile atau JS challenge.
  • Pass tak terlihat — request diizinkan karena bot score tinggi.

Turnstile: widget CAPTCHA gratis

Turnstile adalah widget CAPTCHA mandiri pengganti CAPTCHA tradisional. Ia independen dari Bot Management dan bisa dipasang di situs mana pun — karena itu jauh lebih umum, terutama pada form login dan signup.

Cara kerja Turnstile

Page loads Turnstile widget
    ↓
Widget runs background checks:
  ├─ Browser proof-of-work challenge (cryptographic puzzle)
  ├─ Private Access Token (Apple devices)
  ├─ Browser environment validation
  └─ Cloudflare threat intelligence
    ↓
Result: cf-turnstile-response token generated
    ↓
Token submitted with form data
    ↓
Server validates token via Cloudflare API (siteverify)

Tiga mode widget

Perilaku Turnstile bergantung pada mode yang dipilih pemilik situs:

  • Managed — Cloudflare memilih sendiri antara invisible dan interactive; default dan direkomendasikan.
  • Non-interactive — selalu invisible, hanya proof-of-work; untuk form gesekan rendah.
  • Invisible — tanpa widget terlihat, berjalan saat halaman dimuat untuk verifikasi di latar.

Integrasi Turnstile

<!-- Simple Turnstile integration -->
<div class="cf-turnstile" data-sitekey="0x4AAAAAAAC3DHQhMMQ_Rxrg"></div>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>

Menyelesaikan keduanya: beda usaha

Perbedaan arsitektur tadi menentukan beban kerja: Turnstile selesai dalam satu panggilan API, Bot Management butuh lebih dari token.

Turnstile: satu panggilan API

Metode Turnstile CaptchaAI menyelesaikannya dengan tingkat keberhasilan tinggi lewat empat langkah baku:

  1. Kirim task berisi sitekey dan pageurl ke in.php.
  2. Simpan task ID dari respons.
  3. Polling res.php sampai status siap.
  4. Pakai token pada pengiriman form.
import requests
import time

API_KEY = "YOUR_API_KEY"

submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "turnstile",
    "sitekey": "0x4AAAAAAAC3DHQhMMQ_Rxrg",
    "pageurl": "https://example.com/signup",
    "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"Turnstile token: {token[:50]}...")
        break

Bot Management: token saja tidak cukup

  • Komponen CAPTCHA-nya (jika ada) biasanya Managed Challenge yang dirender sebagai Turnstile, jadi token-nya sama.
  • Bedanya, Anda perlu header wajar dan egress yang diotorisasi lebih dulu.
  • Tanpa itu, bot score jatuh sebelum widget muncul dan token pun percuma.
# Bot Management flow for automation:

# 1. Make initial request
response = requests.get("https://protected-site.com/api/data")

# 2. Check if challenged
if response.status_code == 403:
    # Hard block — need to adjust headers, proxy, or approach
    pass
elif "challenge" in response.text.lower() or response.status_code == 503:
    # JavaScript challenge or managed challenge
    # If it contains a Turnstile widget, solve it:
    if "cf-turnstile" in response.text or "challenges.cloudflare.com" in response.text:
        # Extract sitekey and solve via CaptchaAI
        sitekey = extract_turnstile_sitekey(response.text)
        token = solve_turnstile(sitekey, "https://protected-site.com/api/data")

Halaman Cloudflare Challenge (bukan Turnstile)

Halaman JavaScript challenge "Checking your browser" BUKAN widget Turnstile — solver Turnstile akan gagal di sini. CaptchaAI menanganinya lewat metode cloudflare_challenge:

submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "cloudflare_challenge",
    "sitekey": "managed",
    "pageurl": "https://protected-site.com/login",
    "json": 1,
})

Cara mengenali proteksi yang aktif

Kenali dulu proteksi yang aktif — salah baca sinyal berarti salah metode. Gejala umum dan penyebabnya:

  • Halaman "Checking your browser" 5 detik → Bot Management (JS challenge); cari cf-chl-validasi atau jschl_vc.
  • Widget cf-turnstile pada form → Turnstile mandiri; ada challenges.cloudflare.com/turnstile.
  • 403 dengan halaman error Cloudflare → Bot Management (hard block); header cf-ray.
  • Checkbox interaktif di halaman Cloudflare → Managed Challenge; domain challenges.cloudflare.com.
  • Tanpa challenge terlihat tapi cookie qa_validation_cookie di-set → Bot Management (pass).

Alih-alih menebak, periksa status code dan isi HTML. Fungsi berikut mengembalikan sinyal untuk memilih penanganan:

import requests

def identify_cloudflare_protection(url):
    """Identify which Cloudflare protection a URL uses."""
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                      "AppleWebKit/537.36 Chrome/120.0.0.0",
    }

    response = requests.get(url, headers=headers, timeout=15, allow_redirects=False)
    html = response.text

    result = {
        "cloudflare_protected": "cf-ray" in response.headers.get("cf-ray", "")
                                or "cloudflare" in response.headers.get("server", "").lower(),
        "bot_management_challenge": False,
        "turnstile_widget": False,
        "hard_block": False,
        "passed": False,
    }

    if response.status_code == 403:
        result["hard_block"] = True
    elif response.status_code == 503 and "jschl" in html:
        result["bot_management_challenge"] = True
    elif "cf-turnstile" in html:
        result["turnstile_widget"] = True
    elif response.status_code == 200:
        result["passed"] = True

    return result

Contoh: tim price-monitoring di Jakarta

Kasus ini umum di kalangan freelancer scraping dan agensi price-monitoring lokal. Sebuah tim memantau harga ratusan produk, deploy di AWS ap-southeast-1 (Singapura). Untuk kebanyakan target, alurnya lugas:

  1. Deteksi widget cf-turnstile pada halaman.
  2. Kirim sitekey ke CaptchaAI dan ambil token via polling.
  3. Tempelkan token pada request pengiriman form — selesai.

Masalah muncul saat satu target memakai Bot Management penuh dan membalas 403 pada IP datacenter — Turnstile tak menolong, karena block terjadi sebelum ada widget. Karena CaptchaAI menagih per thread, bukan per solve, biaya tetap terprediksi berapa pun volume; paket BASIC ($15/bulan, 5 thread) sudah cukup untuk banyak beban price-monitoring kecil. Catatan kepatuhan: di bawah UU Pelindungan Data Pribadi (UU 27/2022), olah hanya data yang boleh Anda proses.


Memilih pendekatan yang tepat

Setelah tahu proteksi mana yang aktif, keputusannya sederhana:

  • Hanya widget Turnstile — selesaikan langsung via metode Turnstile CaptchaAI.
  • Halaman "Checking your browser" — pakai metode cloudflare_challenge, bukan solver Turnstile.
  • 403 di level jaringan — perbaiki header, egress, dan sidik TLS agar bot score naik, baru selesaikan CAPTCHA-nya.
  • Ragu — jalankan fungsi identifikasi di atas dulu.

Pertanyaan yang sering diajukan

Apakah token Turnstile cukup untuk melewati Bot Management?

Tidak selalu. Bot Management menilai tiap request dari banyak sinyal sekaligus:

  • Bot score, reputasi IP, sidik TLS JA3/JA4, dan pola request.
  • Token CAPTCHA hanya menuntaskan satu lapisan.
  • Jika bot score jatuh sebelum widget muncul (misalnya karena IP datacenter), perbaiki header dan egress dulu.

Berapa biaya menyelesaikan Turnstile dengan CaptchaAI?

Penagihan per thread bersamaan, bukan per solve, jadi biaya tak naik seiring volume:

  • BASIC — $15/bulan, 5 thread
  • ENTERPRISE — $300/bulan, 200 thread
  • VIP-1 hingga VIP-3 untuk kebutuhan lebih besar

Tiap thread memberi solve tak terbatas selama paket aktif.

Bagaimana dengan hCaptcha dan FunCaptcha di konteks Cloudflare?

Keduanya jarang relevan di sini — proteksi Cloudflare memakai Turnstile dan Cloudflare Challenge, keduanya didukung CaptchaAI. hCaptcha dan FunCaptcha (Arkose Labs) sendiri tidak didukung saat ini; untuk itu Anda memerlukan layanan lain.


Ringkasan

  • Turnstile — widget CAPTCHA gratis berbasis browser proof-of-work; selesaikan langsung via metode Turnstile CaptchaAI dengan tingkat keberhasilan tinggi.
  • Bot Management — pertahanan level jaringan berbayar dengan ML scoring, aturan WAF, dan analisis perilaku; CAPTCHA hanya satu lapisannya.
  • Alur otomasi — kenali proteksi yang aktif, selesaikan Turnstile atau Cloudflare Challenge lewat CaptchaAI, lalu siapkan header dan egress untuk block level jaringan.

Artikel Terkait

Komentar dinonaktifkan untuk artikel ini.