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