Perbandingan

Cloudflare Managed Challenge vs Interactive Challenge

Cloudflare menyediakan dua aksi challenge yang dapat dikonfigurasi operator situs dalam aturan WAF: Managed Challenge dan Interactive Challenge. Managed Challenge adalah pendekatan modern dan adaptif — Cloudflare menentukan tingkat kesulitan per pengunjung. Interactive Challenge adalah opsi lama yang selalu menampilkan CAPTCHA terlihat. Memahami perbedaannya menentukan metode CaptchaAI mana yang digunakan dan apa yang diharapkan selama otomasi.


Perbandingan Cepat

Fitur Managed Challenge Interactive Challenge
Diperkenalkan 2021 Legacy (pra-2021)
Adaptif? Ya (Cloudflare memutuskan per pengunjung) Tidak (selalu interaktif)
Invisible pass mungkin? Ya (~90% pengunjung lolos tanpa tampilan) Tidak (selalu menampilkan CAPTCHA)
Tipe challenge yang digunakan Invisible JS → Turnstile → JS Challenge CAPTCHA selalu terlihat
Direkomendasikan Cloudflare? Ya (default untuk aturan baru) Tidak (dipertahankan untuk backward compatibility)
Gesekan pengguna Rendah (kebanyakan lolos tanpa melihat apapun) Tinggi (selalu butuh interaksi)
Status HTTP 503 403
Metode CaptchaAI turnstile atau cloudflare_challenge turnstile

Managed Challenge (Modern)

Managed Challenge adalah aksi challenge yang direkomendasikan Cloudflare. Pendekatan ini menggunakan kerangka keputusan untuk menyajikan challenge yang paling tidak mengganggu:

Alur Keputusan

Aturan WAF memicu Managed Challenge
    ↓
Cloudflare mengevaluasi sinyal pengunjung:
  ├─ Kualitas browser sinyal browser
  ├─ Skor reputasi IP
  ├─ TLS sinyal browser (JA3/JA4)
  ├─ Riwayat request
  ├─ Sinyal perilaku
  └─ Kapabilitas perangkat
    ↓
Penilaian risiko → Level challenge dipilih:
  ├─ RISIKO RENDAH → Invisible pass (tidak ada UI terlihat)
  ├─ RISIKO SEDANG → Turnstile non-interaktif (background PoW)
  ├─ RISIKO TINGGI → Interactive Turnstile (checkbox/widget)
  └─ RISIKO SANGAT TINGGI → Halaman JavaScript challenge (tunggu 5 detik)
    ↓
Challenge selesai
    ↓
Cookie qa_validation_cookie diterbitkan

Yang Dialami Pengunjung

Tipe pengunjung Yang mereka lihat Persentase
Browser biasa, IP bagus Tidak ada (invisible pass) ~90%
Browser baru, IP netral Spinner singkat ~5%
Sinyal mencurigakan Checkbox Turnstile ~4%
Sinyal berisiko tinggi Halaman "Checking your browser..." ~1%

Output HTML

Halaman Managed Challenge menggunakan platform challenge Cloudflare:

<!-- Managed Challenge page (when visible) -->
<body>
    <div id="challenge-stage">
        <div id="challenge-body-text">
            Verifying you are human. This may take a few seconds.
        </div>

        <!-- Turnstile widget (when rendered) -->
        <div class="cf-turnstile"
             data-sitekey="0x4AAAAAAAC3DHQhMMQ_Rxrg">
        </div>
    </div>

    <!-- Challenge platform script -->
    <script src="/cdn-cgi/challenge-platform/h/g/orchestrate/managed/v1?ray=...">
    </script>
</body>

Interactive Challenge (Legacy)

Interactive Challenge selalu menampilkan CAPTCHA visual yang harus diinteraksikan pengunjung. Tidak ada jalan invisible — setiap pengunjung melihat dan harus menyelesaikan challenge-nya.

Cara Kerjanya

Aturan WAF memicu Interactive Challenge
    ↓
Full-page CAPTCHA disajikan (HTTP 403)
    ↓
Pengunjung harus berinteraksi dengan widget CAPTCHA
    ↓
CAPTCHA diselesaikan
    ↓
Cookie qa_validation_cookie diterbitkan

Yang Dialami Pengunjung

Setiap pengunjung melihat challenge full-page dengan widget seperti Turnstile:

<!-- Interactive Challenge page -->
<body>
    <div id="challenge-running">
        <div class="main-wrapper">
            <h2>Please verify you are human</h2>

            <!-- Always-visible challenge widget -->
            <div class="challenge-widget">
                <!-- Checkbox + verification -->
            </div>
        </div>
    </div>
</body>

Mengapa Cloudflare Tidak Merekomendasikannya

Masalah Dampak
Selalu terlihat 100% pengunjung melihat challenge
Gesekan lebih tinggi Setiap pengunjung harus berinteraksi
Bounce rate lebih tinggi Pengguna pergi daripada menyelesaikannya
Tidak ada adaptasi risiko Pengunjung yang dikenal baik juga kena challenge
Masalah aksesibilitas Setiap pengunjung harus menyelesaikan interaksi

Deteksi: Challenge Apa yang Saya Hadapi?

import requests
import re

def identify_challenge_type(url):
    """Determine if a URL uses Managed or Interactive Challenge."""
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                      "AppleWebKit/537.36 Chrome/120.0.0.0",
        "Accept": "text/html,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.9",
    }

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

    result = {
        "url": url,
        "status": status,
        "challenge_type": None,
        "cf_ray": response.headers.get("cf-ray", ""),
        "solve_method": None,
    }

    if status == 200:
        # Check for inline Turnstile widget (not a challenge page)
        if "cf-turnstile" in html:
            result["challenge_type"] = "turnstile_widget"
            result["solve_method"] = "turnstile"
        else:
            result["challenge_type"] = "none"
        return result

    if status == 503:
        # 503 indicates Managed Challenge or IUAM
        if "managed" in html or "challenge-platform" in html:
            result["challenge_type"] = "managed_challenge"
            result["solve_method"] = "turnstile"  # Managed renders as Turnstile
        elif "jschl" in html:
            result["challenge_type"] = "iuam_js_challenge"
            result["solve_method"] = "cloudflare_challenge"
        else:
            result["challenge_type"] = "unknown_503"
        return result

    if status == 403:
        if "challenge" in html.lower():
            result["challenge_type"] = "interactive_challenge"
            result["solve_method"] = "turnstile"
        else:
            result["challenge_type"] = "waf_block"
            result["solve_method"] = None  # Hard block, not solvable
        return result

    return result


# Usage
info = identify_challenge_type("https://protected-site.com/login")
print(f"Challenge: {info['challenge_type']}")
print(f"Solve with: {info['solve_method']}")

Tabel Deteksi

Sinyal Managed Challenge Interactive Challenge IUAM WAF Block
Status HTTP 503 403 503 403
challenge-platform dalam HTML
Path managed dalam skrip
jschl dalam HTML
Selalu menampilkan widget
Invisible pass mungkin

Cara Solve Setiap Jenis Challenge

Solve Managed Challenge

Managed Challenge biasanya ditampilkan sebagai widget Turnstile. Gunakan metode turnstile CaptchaAI:

import requests
import time

API_KEY = "YOUR_API_KEY"

def solve_managed_challenge(url, sitekey=None):
    """Solve Cloudflare Managed Challenge."""
    # If sitekey not provided, extract from page
    if not sitekey:
        import re
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                          "AppleWebKit/537.36 Chrome/120.0.0.0",
        }
        page = requests.get(url, headers=headers, timeout=15)
        match = re.search(
            r'data-sitekey=["\']([0-9x][A-Za-z0-9_-]+)["\']', page.text
        )
        sitekey = match.group(1) if match else None

    if not sitekey:
        # No visible Turnstile — try cloudflare_challenge method
        return solve_js_challenge(url)

    submit = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": API_KEY,
        "method": "turnstile",
        "sitekey": sitekey,
        "pageurl": url,
        "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:
            return result["request"]

    raise TimeoutError("Solve timed out")


def solve_js_challenge(url):
    """Fallback to cloudflare_challenge method."""
    submit = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": API_KEY,
        "method": "cloudflare_challenge",
        "sitekey": "managed",
        "pageurl": url,
        "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:
            return result["request"]

    raise TimeoutError("Solve timed out")

Solve Interactive Challenge

Interactive Challenge selalu menampilkan widget yang terlihat. Gunakan metode turnstile yang sama:

def solve_interactive_challenge(url, sitekey):
    """Solve Cloudflare Interactive Challenge (legacy)."""
    submit = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": API_KEY,
        "method": "turnstile",
        "sitekey": sitekey,
        "pageurl": url,
        "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:
            return result["request"]

    raise TimeoutError("Solve timed out")

Node.js (keduanya tipe)

const axios = require("axios");

const API_KEY = "YOUR_API_KEY";

async function solveCloudflareChallenge(url, type = "managed") {
  const method = type === "js_challenge" ? "cloudflare_challenge" : "turnstile";
  const sitekey =
    type === "js_challenge" ? "managed" : await extractSitekey(url);

  const submit = await axios.post("https://ocr.captchaai.com/in.php", null, {
    params: {
      key: API_KEY,
      method,
      sitekey: sitekey || "managed",
      pageurl: url,
      json: 1,
    },
  });

  const taskId = submit.data.request;

  for (let i = 0; i < 60; i++) {
    await new Promise((r) => setTimeout(r, 5000));

    const result = await axios.get("https://ocr.captchaai.com/res.php", {
      params: { key: API_KEY, action: "get", id: taskId, json: 1 },
    });

    if (result.data.status === 1) {
      return result.data.request;
    }
  }

  throw new Error("Solve timed out");
}

async function extractSitekey(url) {
  try {
    const response = await axios.get(url, {
      headers: { "User-Agent": "Mozilla/5.0 Chrome/120.0.0.0" },
      validateStatus: () => true,
    });
    const match = response.data.match(
      /data-sitekey=["']([0-9x][A-Za-z0-9_-]+)["']/
    );
    return match ? match[1] : null;
  } catch {
    return null;
  }
}

Migrasi dari Interactive ke Managed Challenge

Cloudflare merekomendasikan migrasi dari Interactive Challenge ke Managed Challenge. Jika situs yang Anda otomasi beralih:

Perubahan Efek pada Otomasi
Interactive → Managed Mungkin mulai lolos invisible (~90% kemungkinan)
HTTP 403 → 503 Perbarui pemeriksaan kode status
Selalu terlihat → adaptif Widget mungkin tidak ada di HTML
Sitekey yang sama Kode solve CaptchaAI tetap sama
Output qa_validation_cookie yang sama Penanganan cookie tetap sama

Alur kerja detektor cepat

  • Periksa apakah halaman tersebut menampilkan halaman tantangan interstisial atau menyematkan widget di dalam alur aplikasi.
  • Cari penanda cf-chl, wadah pintu putar, dan kait panggilan balik sebelum memutuskan jalur penanganan.
  • Catat hasil deteksi dengan URL halaman dan identitas proksi sehingga perubahan target yang berulang dapat terlihat dengan cepat.

Alur kerja detektor cepat

  • Periksa apakah halaman tersebut menampilkan halaman tantangan interstisial atau menyematkan widget di dalam alur aplikasi.
  • Cari penanda cf-chl, wadah pintu putar, dan kait panggilan balik sebelum memutuskan jalur penanganan.
  • Catat hasil deteksi dengan URL halaman dan identitas proksi sehingga perubahan target yang berulang dapat terlihat dengan cepat.

Pemecahan masalah

Gejala Sebab Perbaiki
503 tanpa widget yang terlihat Tantangan Terkelola berlalu tanpa terlihat Tidak perlu tindakan apa pun — Anda lulus
503 dengan "Memeriksa browser Anda" Berhasil diangkat ke tantangan JS Gunakan metode cloudflare_challenge
403 dengan CAPTCHA terlihat Tantangan Interaktif (warisan) Gunakan metode turnstile
403 tanpa tantangan Blok WAF, bukan tantangan Ubah IP atau pola permintaan
Jenis tantangan berubah secara acak Tantangan Terkelola beradaptasi dengan sinyal Tangani tantangan Cloudflare Turnstile dan JS
qa_validation_cookie dari satu jenis ditolak untuk jenis lainnya Aliran tantangan yang berbeda, domain yang sama Selesaikan tantangan apa pun yang disajikan

Pertanyaan Umum

Haruskah saya selalu mencoba Managed Challenge terlebih dahulu?

Ya. Sebagian besar situs sekarang menggunakan Managed Challenge. Mulai dengan metode turnstile, dan fallback ke cloudflare_challenge jika halaman menampilkan JavaScript challenge (503 dengan "Checking your browser").

Bisakah situs menggunakan kedua tipe pada halaman berbeda?

Ya, tapi jarang. Setiap aturan WAF bisa punya aksi berbeda. Satu aturan mungkin menggunakan Managed Challenge untuk /login dan Interactive Challenge untuk /api/.

Ya. Kedua tipe challenge menghasilkan cookie qa_validation_cookie yang sama. Penanganan cookie sama, apapun tipe challenge-nya.

Bagaimana jika Managed Challenge tidak disadari?

Jika Managed Challenge memutuskan bahwa request Anda berisiko rendah, request akan diteruskan tanpa challenge yang terlihat. Respons Anda adalah 200 normal dengan konten halaman. Tidak diperlukan solving CaptchaAI dalam kasus ini.

Apakah Interactive Challenge sudah dihentikan?

Cloudflare belum secara resmi menghentikannya, tapi merekomendasikan Managed Challenge untuk semua aturan baru. Interactive Challenge dipertahankan untuk backward compatibility. Situs bisa migrasi kapan saja.


Ringkasan

Cloudflare Managed Challenge secara adaptif memilih tingkat kesulitan challenge per pengunjung (dari invisible pass hingga JS challenge penuh), sedangkan Interactive Challenge selalu menampilkan CAPTCHA terlihat. Keduanya menghasilkan cookie qa_validation_cookie yang sama dan dapat di-solve dengan CaptchaAI — gunakan turnstile untuk sebagian besar challenge dan cloudflare_challenge untuk halaman JavaScript challenge. Managed Challenge adalah standar modern; Interactive Challenge adalah legacy.

Artikel Terkait

  • Cloudflare Browser Integrity Check vs CAPTCHA
  • Cloudflare Challenge vs Turnstile: Cara Mendeteksi
Komentar dinonaktifkan untuk artikel ini.