Perbandingan

Cloudflare Browser Integrity Check vs CAPTCHA Challenge

Cloudflare menawarkan dua pertahanan berbeda yang sering disamakan developer: Browser Integrity Check (BIC) dan CAPTCHA challenge. BIC adalah pemeriksaan level header pasif yang memblokir traffic non-browser tanpa challenge apa pun — hanya mengembalikan 403. CAPTCHA challenge (Turnstile, JavaScript challenge, Managed Challenge) menyajikan tugas yang dapat diselesaikan dan bisa dilewati browser yang sah. Perbedaan ini penting karena masing-masing memerlukan strategi penanganan yang berbeda.


Perbandingan

Fitur Browser Integrity Check CAPTCHA Challenge
Apa yang diperiksa Hanya header HTTP Perilaku browser + lingkungan
JavaScript diperlukan? Tidak (level header) Ya
Pengguna melihat Tidak ada (pass) atau 403 (fail) Widget challenge atau halaman JS
Status HTTP gagal 403 503
Bisa di-solve? Tidak — perbaiki header Ya — solve CAPTCHA
Cookie diterbitkan Tidak qa_validation_cookie
CaptchaAI diperlukan? Tidak — perbaiki header request Ya
Default aktif Ya (semua paket Cloudflare) Tidak (dikonfigurasi per aturan WAF)
Berlaku untuk Setiap request Hanya yang cocok aturan WAF

Pemeriksaan Integritas Browser (BIC)

BIC mengevaluasi header permintaan HTTP untuk mendeteksi lalu lintas non-browser. Ini berjalan sebelum tantangan JavaScript atau CAPTCHA apa pun.

Apa yang diperiksa BIC

Periksa Apa yang dicarinya Kegagalan umum
Validasi Agen Pengguna UA tidak ada, kosong, atau diketahui buruk python-requests/2.31, keriting, wget
Urutan tajuk Header dalam urutan yang tidak biasa Pustaka HTTP non-browser
Header browser tidak ada Accept, Accept-Language, Accept-Encoding hilang Klien HTTP minimal
Tanda tangan bot yang dikenal UA pengirim spam, UA pemindai Googlebot dari IP non-Google
Daftar hitam penyalahgunaan IP IP berbahaya yang diketahui IP pusat data dalam daftar blokir

aliran BIC

Request hits Cloudflare edge
    ↓
BIC evaluates HTTP headers:
  ├─ User-Agent present and valid?
  ├─ Required headers (Accept, Accept-Language) present?
  ├─ Header order consistent with browser?
  └─ IP not on abuse list?
    ↓
Pass → Request forwarded to origin
    OR
Fail → 403 Forbidden (no challenge offered)

Melewati BIC

BIC diselesaikan dengan mengirimkan header seperti browser yang tepat. Tidak diperlukan solusi CAPTCHA:

import requests

# ❌ FAILS BIC — minimal headers
response = requests.get("https://cloudflare-protected.com")
# User-Agent: python-requests/2.31.0
# Result: 403 Forbidden

# ✅ PASSES BIC — browser-like headers
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                  "AppleWebKit/537.36 (KHTML, like Gecko) "
                  "Chrome/120.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,"
              "image/avif,image/webp,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept-Encoding": "gzip, deflate, br",
    "Connection": "keep-alive",
    "Upgrade-Insecure-Requests": "1",
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "none",
    "Sec-Fetch-User": "?1",
}

response = requests.get("https://cloudflare-protected.com", headers=headers)
# Result: 200 OK (passed BIC)

Node.js

const axios = require("axios");

// Browser-like headers to pass BIC
const headers = {
  "User-Agent":
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0",
  Accept:
    "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,*/*;q=0.8",
  "Accept-Language": "en-US,en;q=0.9",
  "Accept-Encoding": "gzip, deflate, br",
  Connection: "keep-alive",
  "Upgrade-Insecure-Requests": "1",
  "Sec-Fetch-Dest": "document",
  "Sec-Fetch-Mode": "navigate",
  "Sec-Fetch-Site": "none",
  "Sec-Fetch-User": "?1",
};

async function fetchWithBIC(url) {
  const response = await axios.get(url, { headers });
  console.log(`Status: ${response.status}`);
  return response.data;
}

Tantangan CAPTCHA

Tantangan CAPTCHA dijalankan setelah BIC lolos. Mereka memerlukan eksekusi JavaScript dan menghadirkan tantangan yang dapat dipecahkan:

Jenis tantangan Cloudflare CAPTCHA

Tipe tantangan Pemicu Terlihat oleh pengguna? metode CaptchaAI
Widget pintu putar Disematkan pada halaman oleh pengembang Widget pada formulir turnstile
Tantangan Terkelola Pertandingan aturan WAF Adaptif (tidak terlihat/checkbox) turnstile
Tantangan JavaScript Aturan IUAM atau WAF Halaman "Memeriksa browser Anda". cloudflare_challenge
Tantangan Interaktif Kecurigaan tinggi Tantangan satu halaman penuh cloudflare_challenge

Alur tantangan (berbeda dengan BIC)

Request passes BIC check
    ↓
WAF rules evaluate bot score, IP, path
    ↓
Rule triggers CAPTCHA challenge (HTTP 503)
    ↓
Browser executes JavaScript challenge
    ↓
Challenge solved → qa_validation_cookie cookie issued
    ↓
Subsequent requests pass with cookie

Membedakan Blok BIC dari CAPTCHA Challenge

Saat request Anda diblokir, identifikasi jenisnya untuk menentukan perbaikan:

import requests

def diagnose_cloudflare_block(url):
    """Determine if block is BIC or CAPTCHA."""
    # Intentionally use minimal headers to trigger BIC
    minimal_response = requests.get(url, timeout=15, allow_redirects=False)

    # Use browser headers to validasi BIC
    browser_headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                      "AppleWebKit/537.36 Chrome/120.0.0.0",
        "Accept": "text/html,application/xhtml+xml,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.9",
        "Accept-Encoding": "gzip, deflate, br",
    }
    browser_response = requests.get(
        url, headers=browser_headers, timeout=15, allow_redirects=False
    )

    result = {
        "minimal_headers_status": minimal_response.status_code,
        "browser_headers_status": browser_response.status_code,
    }

    if minimal_response.status_code == 403 and browser_response.status_code == 200:
        result["diagnosis"] = "BIC only — fix headers to pass"
        result["fix"] = "Add browser-like headers"

    elif minimal_response.status_code == 403 and browser_response.status_code == 403:
        result["diagnosis"] = "IP or WAF block — not just BIC"
        result["fix"] = "Change IP or check WAF rules"

    elif browser_response.status_code == 503:
        html = browser_response.text
        if "jschl" in html:
            result["diagnosis"] = "IUAM JavaScript challenge"
            result["fix"] = "Use CaptchaAI cloudflare_challenge method"
        elif "cf-turnstile" in html or "challenge-platform" in html:
            result["diagnosis"] = "Managed/Turnstile challenge"
            result["fix"] = "Use CaptchaAI turnstile method"
        else:
            result["diagnosis"] = "Unknown Cloudflare challenge"
            result["fix"] = "Inspect page source for challenge type"

    elif browser_response.status_code == 200:
        html = browser_response.text
        if "cf-turnstile" in html:
            result["diagnosis"] = "Page loads but has Turnstile widget"
            result["fix"] = "Use CaptchaAI turnstile method for form submission"
        else:
            result["diagnosis"] = "No challenge — page accessible"
            result["fix"] = "None needed"

    return result


# Usage
diagnosis = diagnose_cloudflare_block("https://example-cf-site.com")
print(f"Diagnosis: {diagnosis['diagnosis']}")
print(f"Fix: {diagnosis['fix']}")

Skenario Umum

Skenario 1: Blok BIC saja

Request with python-requests UA → 403
Request with Chrome UA → 200 ✓

Fix: Add proper browser headers. No CaptchaAI needed.

Skenario 2: BIC pass, lalu CAPTCHA

Request with Chrome UA → 503 (challenge page)

Fix: Headers are fine. Use CaptchaAI to solve the challenge.

Skenario 3: BIC + CAPTCHA bersamaan

Request with python-requests UA → 403 (BIC block)
Request with Chrome UA → 503 (CAPTCHA challenge)

Fix: First fix headers, then solve CAPTCHA with CaptchaAI.

Skenario 4: Blok IP

Request with python-requests UA → 403
Request with Chrome UA → 403

Fix: Neither BIC nor solvable challenge. IP is blocked.
Try different IP/proxy.

Header Penting untuk Melewati BIC

Header Penting

CLOUDFLARE_SAFE_HEADERS = {
    # Mandatory
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                  "AppleWebKit/537.36 (KHTML, like Gecko) "
                  "Chrome/120.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept-Encoding": "gzip, deflate, br",

    # Strongly recommended
    "Connection": "keep-alive",
    "Upgrade-Insecure-Requests": "1",

    # Sec-Fetch headers (modern Chrome)
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "none",
    "Sec-Fetch-User": "?1",

    # Recommended for consistency
    "Sec-Ch-Ua": '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"',
    "Sec-Ch-Ua-Mobile": "?0",
    "Sec-Ch-Ua-Platform": '"Windows"',
}

Header yang Memicu Blok BIC

Header Mengapa gagal
User-Agent: python-requests/2.31.0 Identifier library HTTP yang dikenal
User-Agent: curl/7.81.0 Identifier CLI tool
Header Accept tidak ada Tidak ada browser yang menghilangkan Accept
Accept-Language tidak ada Semua browser mengirimkan ini
User-Agent: "" (kosong) Tidak valid — otomasi yang jelas
User-Agent: Googlebot/2.1 dari IP non-Google Identitas bot palsu

Pemecahan Masalah

Gejala Penyebab Solusi
403 dengan header minimal, 200 dengan header browser BIC saja Gunakan header seperti browser
403 dengan semua kombinasi header IP diblokir atau aturan WAF Coba IP atau proxy lain
503 dengan halaman challenge CAPTCHA challenge (bukan BIC) Gunakan CaptchaAI
403 sesekali Rate limiting atau berbasis sesi Turunkan rate request, pertahankan sesi
Header benar tapi masih 403 TLS sinyal browser check (JA3) Gunakan curl_cffi atau browser asli

Pertanyaan yang Sering Diajukan

Bisakah saya menonaktifkan BIC untuk situs saya?

Ya. Operator situs dapat menonaktifkan BIC di dashboard Cloudflare di Security > Settings. Ini aktif secara default di semua paket.

Apakah BIC memeriksa TLS sinyal browser?

Tidak secara langsung. BIC berfokus pada header HTTP. Namun, Cloudflare Bot Management (enterprise) yang lebih luas memeriksa TLS sinyal browser JA3/JA4 secara terpisah dari BIC.

Jika saya lolos BIC, apakah saya masih bisa mendapat CAPTCHA?

Ya. BIC dan CAPTCHA challenge adalah lapisan independen. Lolos BIC berarti header Anda terlihat sah. Anda masih bisa memicu CAPTCHA dari aturan WAF, bot scoring, atau mode IUAM.

Apakah CaptchaAI membantu dengan BIC?

Tidak — BIC tidak menyajikan challenge yang bisa di-solve. Perbaiki header HTTP Anda untuk melewati BIC. CaptchaAI menangani CAPTCHA challenge (Turnstile, JavaScript challenge, Managed Challenge) yang muncul setelah BIC lolos.

Bagaimana header Sec-Fetch mempengaruhi BIC?

Chrome modern mengirimkan header Sec-Fetch-* secara otomatis. Ketidakhadirannya tidak selalu memicu BIC, namun menyertakannya membuat profil request lebih konsisten dengan browser asli.


Ringkasan

Cloudflare Browser Integrity Check memblokir request dengan header yang jelas non-browser (403), sementara CAPTCHA challenge menyajikan tugas yang bisa diselesaikan (503). BIC diperbaiki dengan menggunakan header seperti browser yang tepat — tidak perlu CaptchaAI. CAPTCHA challenge memerlukan CaptchaAI atau Cloudflare Challenge solver. Selalu diagnosa jenis blok terlebih dahulu: perbaiki header untuk BIC, gunakan CaptchaAI untuk CAPTCHA, dan ganti IP untuk hard block.


Artikel Terkait

  • Cloudflare Challenge vs Turnstile: Mendeteksi Perbedaan
  • Cloudflare Managed vs Interactive Challenge
Komentar dinonaktifkan untuk artikel ini.