Vergleiche

Cloudflare-Browser-Integritätsprüfung vs. CAPTCHA-Herausforderung

Cloudflare bietet zwei unterschiedliche Abwehrmaßnahmen, die Entwickler häufig vermischen: den Browser Integrity Check (BIC) und die CAPTCHA-Herausforderungen. BIC ist eine passive Prüfung auf Header-Ebene, die offensichtlich nicht zum Browser gehörenden Datenverkehr ohne jede Herausforderung blockiert – sie gibt lediglich einen 403 zurück. CAPTCHA-Herausforderungen (Turnstile, JavaScript-Herausforderungen, verwaltete Herausforderungen) stellen eine lösbare Aufgabe dar, die legitime Browser bewältigen können. Die Unterscheidung ist wichtig, da jede eine andere Handhabungsstrategie erfordert.


Wie sie vergleichen

Funktion Browser-Integritätsprüfung CAPTCHA-Herausforderung
Was überprüft wird Nur HTTP-Header Browserverhalten + Umgebung
JavaScript erforderlich? Nein (Kopfebene) Ja
Benutzer sieht Nichts (bestanden) oder 403 (nicht bestanden) Challenge-Widget oder JS-Seite
HTTP-Status bei Fehler 403 503
Lösbar? Nein – Header reparieren, sonst blockiert es Ja – CAPTCHA lösen
Cookie ausgegeben Nein cf_clearance
CaptchaAI benötigt? Nein – Anforderungsheader korrigieren Ja
Standardmäßig aktiviert Ja (alle Cloudflare-Pläne) Nein (konfiguriert pro Regel)
Gilt für Jede Anfrage Nur übereinstimmende WAF-Regeln

Browser-Integritätsprüfung (BIC)

BIC wertet HTTP-Anfrage-Header aus, um offensichtlichen Nicht-Browser-Verkehr zu erkennen. Es wird vor jeder JavaScript- oder CAPTCHA-Herausforderung ausgeführt.

Was BIC prüft

Überprüfen Wonach es sucht Häufige Fehler
User-Agent-Validierung Fehlendes, leeres oder bekanntermaßen fehlerhaftes UA python-requests/2.31, Curl, wget
Header-Reihenfolge Überschriften in ungewöhnlicher Reihenfolge Nicht-Browser-HTTP-Bibliotheken
Fehlende Browser-Header Accept, Accept-Language, Accept-Encoding fehlen Minimale HTTP-Clients
Bekannte Bot-Signaturen Spammer-UAs, Scanner-UAs Googlebot von Nicht-Google-IPs
IP-Blacklists missbrauchen Bekannte schädliche IPs Rechenzentrums-IPs auf Sperrlisten

BIC-Flow

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 bestanden

BIC wird durch das Senden geeigneter browserähnlicher Header gelöst. Es ist keine CAPTCHA-Lösung erforderlich:

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-Herausforderungen

CAPTCHA-Herausforderungen werden ausgeführt, nachdem der BIC bestanden wurde. Sie erfordern die Ausführung von JavaScript und stellen eine lösbare Herausforderung dar:

Arten von Cloudflare CAPTCHA-Herausforderungen

Herausforderungstyp Auslöser Für den Benutzer sichtbar? CaptchaAI-Methode
Drehkreuz-Widget Vom Entwickler auf der Seite eingebettet Widget im Formular turnstile
Gewaltete Herausforderung WAF-Regelübereinstimmung Adaptiv (unsichtbar/checkbox) turnstile
JavaScript-Herausforderung IUAM- oder WAF-Regel Seite „Überprüfen Sie Ihren Browser“. cloudflare_challenge
Interaktive Herausforderung Hoher Verdacht Ganzseitige Challenge cloudflare_challenge

Challenge-Flow (abweichend vom BIC)

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

Unterscheidung von BIC-Blöcken und CAPTCHA-Herausforderungen

Wenn Ihre Anfrage blockiert ist, bestimmt die Identifizierung des Typs die Lösung:

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 bypass 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']}")

Häufige Szenarien

Szenario 1: Nur BIC-Block

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

Fix: Add proper browser headers. No CaptchaAI needed.

Szenario 2: BIC-Pass, dann CAPTCHA

Request with Chrome UA → 503 (challenge page)

Korrektur: Die Header sind in Ordnung. Lösen Sie die Herausforderung mit CaptchaAI.

Szenario 3: BIC + CAPTCHA zusammen

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

Korrektur: Beheben Sie zuerst die Header und lösen Sie danach das CAPTCHA mit CaptchaAI.

Szenario 4: Weder noch – IP-Block

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

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

Best Practices für Header

Unverzichtbare Kopfbälle zum Überholen des BIC

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, die eine BIC-Blockierung auslösen

Kopfzeile Warum es scheitert
User-Agent: python-requests/2.31.0 Bekannte HTTP-Bibliothekskennung
User-Agent: curl/7.81.0 CLI-Tool-ID
Fehlender Accept-Header Kein Browser lässt Accept aus
Accept-Language fehlt Alle Browser senden dies
User-Agent: "" (leer) Ungültig – offensichtliche Automatisierung
User-Agent: Googlebot/2.1 von einer Nicht-Google-IP Gefälschte Bot-Identität

Fehlerbehebung

Symptom Ursache Beheben
403 mit minimalen Headern, 200 mit Browser-Headern Nur BIC Verwenden Sie browserähnliche Header
403 mit allen Header-Kombinationen IP blockiert oder WAF-Regel Versuchen Sie es mit einer anderen IP oder einem anderen Proxy
503 mit Challenge-Seite CAPTCHA-Challenge (nicht BIC) Verwenden Sie CaptchaAI
403 zeitweise Ratenbegrenzend oder sitzungsbasiert Anfragerate senken, Sitzung beibehalten
Header korrekt, aber immer noch 403 TLS-Browser-Signalprofilprüfung (JA3) Verwenden Sie curl_cffi oder einen echten Browser

Häufig gestellte Fragen

Kann ich BIC für meine Website deaktivieren?

Ja. Site-Betreiber können BIC im Cloudflare-Dashboard unter Sicherheit > Einstellungen deaktivieren. Es ist standardmäßig in allen Plänen aktiviert.

Überprüft BIC TLS-Browser-Signalprofile?

Nicht direkt. BIC konzentriert sich auf HTTP-Header. Allerdings untersucht das umfassendere Bot Management (Enterprise) von Cloudflare JA3/JA4 TLS-Browser-Signalprofile getrennt vom BIC.

Erhalte ich weiterhin CAPTCHAs, wenn ich den BIC bestehe?

Ja. BIC- und CAPTCHA-Herausforderungen sind unabhängige Ebenen. Wenn Sie den BIC bestehen, sehen Ihre Header legitim aus. Sie können weiterhin ein CAPTCHA über WAF-Regeln, Bot-Bewertung oder den IUAM-Modus auslösen.

Hilft CaptchaAI beim BIC?

Nein – BIC stellt keine lösbare Herausforderung dar. Korrigieren Sie Ihre HTTP-Header, um BIC zu übergeben. CaptchaAI verarbeitet CAPTCHA-Herausforderungen (Turnstile, JavaScript-Herausforderungen, verwaltete Herausforderungen), die nach dem BIC-Pass erscheinen.

Wie wirken sich Sec-Fetch-Header auf BIC aus?

Modernes Chrome sendet automatisch Sec-Fetch-*-Header. Ihr Fehlen löst nicht immer BIC aus, aber ihre Einbeziehung sorgt dafür, dass Ihr Anforderungsprofil besser mit einem echten Browser übereinstimmt.


Zusammenfassung

Die Browser-Integritätsprüfung von Cloudflare blockiert Anfragen mit offensichtlich nicht zum Browser gehörenden Headern (403), während CAPTCHA-Herausforderungen lösbare Aufgaben darstellen (503). BIC wird durch die Verwendung geeigneter browserähnlicher Header behoben – kein CaptchaAI benötigt. CAPTCHA-Herausforderungen erfordern den Turnstile- oder Cloudflare Challenge-Solver von CaptchaAI. Diagnostizieren Sie immer zuerst den Blocktyp: Korrigieren Sie die Header für BIC, verwenden Sie CaptchaAI für CAPTCHAs und ändern Sie die IPs für harte Blöcke.

Verwandte Artikel

Kommentare sind für diesen Artikel deaktiviert.