Karşılaştırmalar

Cloudflare Tarayıcı Bütünlüğü Kontrolü ve CAPTCHA Mücadelesi

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.

İlgili Makaleler

Bu makale için yorumlar devre dışı bırakılmıştır.