Cloudflare, geliştiricilerin sıklıkla birleştirdiği iki farklı savunma sunar: Tarayıcı Bütünlük Kontrolü (BIC) ve CAPTCHA zorlukları. BIC, tarayıcı dışı trafiği herhangi bir zorluk yaşamadan bloke eden pasif, başlık düzeyinde bir kontroldür; yalnızca 403 sonucunu döndürür. CAPTCHA zorlukları (Turnstile, JavaScript zorlukları, Yönetilen Zorluklar), yasal tarayıcıların geçebileceği çözülebilir bir görev sunar. Ayrım önemlidir çünkü her biri farklı bir işleme stratejisi gerektirir.
Nasıl karşılaştırıyorlar?
| Özellik | Tarayıcı Bütünlüğü Kontrolü | CAPTCHA Mücadelesi |
|---|---|---|
| Neyi kontrol eder | Yalnızca HTTP üstbilgileri | Tarayıcı davranışı + ortam |
| JavaScript gerekli mi? | Hayır (başlık düzeyi) | Evet |
| Kullanıcı görür | Hiçbir şey (geçti) veya 403 (başarısız) | Mücadele widget'ı veya JS sayfası |
| Başarısızlık durumunda HTTP durumu | 403 | 503 |
| Çözülebilir mi? | Hayır — başlıkları düzeltin yoksa bloke olur | Evet — CAPTCHA'yı çöz |
| Çerez yayınlandı | Hayır | qa_session_cookie |
| CaptchaAI gerekli mi? | Hayır — istek başlıklarını düzeltin | Evet |
| Varsayılan olarak etkin | Evet (tüm Cloudflare planları) | Hayır (kural başına yapılandırılmış) |
| Şunlar için geçerlidir | Her istek | Yalnızca WAF kurallarıyla eşleşen |
Tarayıcı Bütünlüğü Kontrolü (BIC)
BIC, tarayıcı dışı trafiği açıkça tespit etmek için HTTP istek başlıklarını değerlendirir. Herhangi bir JavaScript veya CAPTCHA mücadelesinden önce çalışır.
BIC neyi kontrol eder?
| Kontrol et | Ne arıyor | Yaygın hatalar |
|---|---|---|
| Kullanıcı Aracısı doğrulaması | Eksik, boş veya hatalı olduğu bilinen UA | python-requests/2.31, kıvır, kıvır |
| Başlık sırası | Başlıklar olağandışı sırada | Tarayıcı dışı HTTP kitaplıkları |
| Tarayıcı başlıkları eksik | Accept, Accept-Language, Accept-Encoding eksik |
Minimum HTTP istemcileri |
| Bilinen bot imzaları | Spam gönderen UA'lar, tarayıcı UA'ları | Google dışı IP'lerden Googlebot |
| IP kara listelerini kötüye kullanma | Bilinen kötü amaçlı IP'ler | Engellenen listelerdeki veri merkezi IP'leri |
BIC akışı
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)
BIC'i geçmek
BIC, uygun tarayıcı benzeri başlıklar gönderilerek çözülür. CAPTCHA çözümüne gerek yoktur:
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;
}
CAPTCHA zorlukları
CAPTCHA mücadeleleri BIC geçtikten sonra yürütülür. JavaScript'in çalıştırılmasını gerektirirler ve çözülebilir bir zorluk sunarlar:
Cloudflare CAPTCHA zorluklarının türleri
| Mücadele türü | Tetikleyici | Kullanıcıya görünür mü? | CaptchaAI yöntemi |
|---|---|---|---|
| Turnstile widget'ı | Geliştirici tarafından sayfaya yerleştirildi | Formdaki widget | turnstile |
| Yönetilen Mücadele | WAF kural eşleşmesi | Uyarlanabilir (görünmez/checkbox) | turnstile |
| JavaScript Mücadelesi | IUAM veya WAF kuralı | "Tarayıcınızı kontrol etme" sayfası | cloudflare_challenge |
| Etkileşimli Mücadele | Yüksek şüphe | Tam sayfa mücadelesi | cloudflare_challenge |
Mücadele akışı (BIC'den farklıdır)
Request passes BIC check
↓
WAF rules evaluate bot score, IP, path
↓
Rule triggers CAPTCHA challenge (HTTP 503)
↓
Browser executes JavaScript challenge
↓
Challenge solved → qa_session_cookie cookie issued
↓
Subsequent requests pass with cookie
BIC bloklarını CAPTCHA zorluklarından ayırma
İsteğiniz engellendiğinde türün belirlenmesi düzeltmeyi belirler:
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 QA tanılama 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 doğrulama akışı"
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']}")
Ortak senaryolar
Senaryo 1: Yalnızca BIC bloğu
Request with python-requests UA → 403
Request with Chrome UA → 200 ✓
Fix: Add proper browser headers. No CaptchaAI needed.
Senaryo 2: BIC geçişi ve ardından CAPTCHA
Request with Chrome UA → 503 (challenge page)
Fix: Headers are fine. Use CaptchaAI to solve the challenge.
Senaryo 3: BIC + CAPTCHA birlikte
Request with python-requests UA → 403 (BIC block)
Request with Chrome UA → 503 (CAPTCHA challenge)
Fix: First fix headers, then solve CAPTCHA with CaptchaAI.
Senaryo 4: İkisi de — IP bloğu
Request with python-requests UA → 403
Request with Chrome UA → 403
Fix: Neither BIC nor solvable challenge. IP is blocked.
Try different IP/proxy.
Başlıkla ilgili en iyi uygulamalar
BIC'yi geçmek için gerekli başlıklar
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"',
}
BIC engellemeyi tetikleyen başlıklar
| Başlık | Neden başarısız oluyor? |
|---|---|
User-Agent: python-requests/2.31.0 |
Bilinen HTTP kitaplığı tanımlayıcısı |
User-Agent: curl/7.81.0 |
CLI aracı tanımlayıcısı |
Accept başlığı eksik |
Hiçbir tarayıcı kabul etmeyi atlamıyor |
Accept-Language eksik |
Tüm tarayıcılar bunu gönderir |
User-Agent: "" (boş) |
Geçersiz — bariz otomasyon |
Google dışı IP'den User-Agent: Googlebot/2.1 |
Sahte bot kimliği |
Sorun giderme
| Belirti | Sebep | Düzeltme |
|---|---|---|
| Minimal başlıklarla 403, tarayıcı başlıklarıyla 200 | Yalnızca BIC | Tarayıcı benzeri başlıklar kullanın |
| Tüm başlık kombinasyonlarıyla 403 | IP engellendi veya WAF kuralı | Farklı IP veya proxy deneyin |
| 503, meydan okuma sayfasıyla birlikte | CAPTCHA mücadelesi (BIC değil) | CaptchaAI'yi kullanın |
| 403 aralıklı olarak | Hız sınırlamalı veya oturum bazlı | İstek oranını düşürün, oturumu sürdürün |
| Başlıklar doğru ama yine de 403 | TLS test profil yapılandırması kontrolü (JA3) | curl_cffi veya gerçek tarayıcıyı kullanın |
Sık sorulan sorular
Sitem için BIC'yi devre dışı bırakabilir miyim?
Evet. Site operatörleri, Cloudflare kontrol panelinde Güvenlik > Ayarlar altında BIC'yi devre dışı bırakabilir. Tüm planlarda varsayılan olarak etkindir.
BIC, TLS parmak izlerini kontrol ediyor mu?
Doğrudan değil. BIC, HTTP başlıklarına odaklanır. Ancak Cloudflare'in daha geniş Bot Yönetimi (kurumsal), JA3/JA4 TLS parmak izlerini BIC'den ayrı olarak inceler.
BIC'yi geçersem yine de CAPTCHA alacak mıyım?
Evet. BIC ve CAPTCHA zorlukları bağımsız katmanlardır. BIC'yi geçmek, başlıklarınızın meşru görünmesi anlamına gelir. WAF kurallarından, bot puanlamasından veya IUAM modundan hâlâ bir CAPTCHA tetikleyebilirsiniz.
CaptchaAI BIC'e yardımcı oluyor mu?
Hayır — BIC çözülebilir bir zorluk sunmuyor. BIC'yi geçmek için HTTP başlıklarınızı düzeltin. CaptchaAI, BIC geçişlerinden sonra ortaya çıkan CAPTCHA zorluklarını (Turnstile, JavaScript zorlukları, Yönetilen Zorluklar) yönetir.
Sec-Fetch başlıkları BIC'i nasıl etkiler?
Modern Chrome, Sec-Fetch-* başlıklarını otomatik olarak gönderir. Bunların yokluğu her zaman BIC'i tetiklemez, ancak bunların dahil edilmesi istek profilinizi gerçek bir tarayıcıyla daha tutarlı hale getirir.
Özet
Cloudflare'in Tarayıcı Bütünlük Denetimi, açıkça tarayıcı olmayan başlıklara sahip istekleri engeller (403), CAPTCHA zorlukları ise çözülebilir görevler sunar (503). BIC, uygun tarayıcı benzeri başlıklar kullanılarak düzeltilir - hayırCaptchaAIihtiyaç vardı. CAPTCHA zorlukları CaptchaAI'nin Turnstilesini veya Cloudflare doğrulama akışı çözücüyü gerektirir. Her zaman önce blok türünü teşhis edin: BIC için başlıkları düzeltin, CAPTCHA'lar için CaptchaAI kullanın ve sabit bloklar için IP'leri değiştirin.