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
- Cloudflare Challenge: Wie es funktioniert
- GeeTest vs. reCAPTCHA Vergleich
- Cloudflare Managed vs. Interactive Challenge