Cloudflare bietet zwei Challenge-Aktionen, die Website-Betreiber in WAF-Regeln konfigurieren können: Managed Challenge und Interactive Challenge. Managed Challenge ist der moderne, adaptive Ansatz – Cloudflare entscheidet über die Schwierigkeit pro Besucher. Interactive Challenge ist die alte Option und präsentiert immer ein sichtbares CAPTCHA. Das Verständnis des Unterschieds bestimmt, welche CaptchaAI-Methode verwendet werden soll und was bei der Automatisierung zu erwarten ist.
Wenn Sie nur eine schnelle Einordnung brauchen: Managed Challenge ist flexibler und für echte Nutzer meist reibungsärmer, dafür aber in der Diagnose weniger offensichtlich. Interactive Challenge ist leichter zu erkennen, erzeugt aber fast immer sichtbarere Reibung.
Schnelle Entscheidung vor dem Detailvergleich
| Beobachtung | Wahrscheinlicher Typ | Erster sinnvoller Schritt |
|---|---|---|
503 und manche Sitzungen sehen gar kein Widget |
Managed Challenge | Zuerst turnstile, danach bei Bedarf cloudflare_challenge prüfen |
403 und fast immer sichtbare Verifikation |
Interactive Challenge | Als sichtbares Turnstile-ähnliches Challenge-Setup behandeln |
| Dasselbe Ziel lässt manche Sessions durch und blockiert andere | Managed Challenge | Challenge-Typ pro Session erfassen statt einen festen Typ anzunehmen |
Schneller Vergleich
| Funktion | Herausforderung gemanagt | Interaktive Herausforderung |
|---|---|---|
| Eingeführt | 2021 | Legacy (vor 2021) |
| Adaptiv? | Ja (Cloudflare entscheidet pro Besucher) | Nein (immer interaktiv) |
| Unsichtbarer Pass möglich? | Ja (~90 % der Besucher passieren unsichtbar) | Nein (zeigt immer CAPTCHA) |
| Verwendete Herausforderungstypen | Unsichtbare → Drehkreuz → JS-Herausforderung | Immer sichtbares CAPTCHA |
| Von Cloudflare empfohlen? | Ja (Standard für neue Regeln) | Nein (aus Gründen der Abwärtskompatibilität beibehalten) |
| Benutzerreibung | Niedrig (die meisten passieren, ohne etwas zu sehen) | Hoch (erfordert immer Interaktion) |
| HTTP-Status | 503 | 403 |
| CaptchaAI-Methode | turnstile oder cloudflare_challenge |
turnstile |
Managed Challenge (modern)
Managed Challenge ist die von Cloudflare empfohlene Challenge-Aktion. Es verwendet einen Entscheidungsrahmen, um die Herausforderung so gering wie möglich zu halten:
Entscheidungsfluss
WAF rule triggers Managed Challenge
↓
Cloudflare evaluates visitor signals:
├─ Browser fingerprint quality
├─ IP reputation score
├─ TLS fingerprint (JA3/JA4)
├─ Request history
├─ Behavioral signals
└─ Device capabilities
↓
Risk assessment → Challenge level selected:
├─ LOW risk → Invisible pass (no visible UI)
├─ MEDIUM risk → Non-interactive Turnstile (background PoW)
├─ HIGH risk → Interactive Turnstile (checkbox/widget)
└─ VERY HIGH risk → JavaScript challenge page (5s wait)
↓
Challenge completed
↓
cf_clearance cookie issued
Was Besucher erleben
| Besuchertyp | Was sie sehen | Prozentsatz |
|---|---|---|
| Normaler Browser, gute IP | Nichts (unsichtbarer Pass) | ~90 % |
| Neuer Browser, neutrale IP | Kurzer Spinner | ~5% |
| Verdächtige Signale | Kontrollkästchen Drehkreuz | ~4% |
| Hochriskante Signale | Seite „Überprüfen Sie Ihren Browser...“. | ~1% |
HTML-Ausgabe
Verwaltete Challenge-Seiten nutzen die Challenge-Plattform von Cloudflare:
<!-- Managed Challenge page (when visible) -->
<body>
<div id="challenge-stage">
<div id="challenge-body-text">
Verifying you are human. This may take a few seconds.
</div>
<!-- Turnstile widget (when rendered) -->
<div class="cf-turnstile"
data-sitekey="0x4AAAAAAAC3DHQhMMQ_Rxrg">
</div>
</div>
<!-- Challenge platform script -->
<script src="/cdn-cgi/challenge-platform/h/g/orchestrate/managed/v1?ray=...">
</script>
</body>
Interaktive Herausforderung (Legacy)
Interactive Challenge präsentiert immer ein sichtbares CAPTCHA, mit dem der Besucher interagieren muss. Es gibt keinen unsichtbaren Pass – jeder Besucher sieht die Herausforderung und muss sie meistern.
Wie es funktioniert
WAF rule triggers Interactive Challenge
↓
Full-page CAPTCHA served (HTTP 403)
↓
Visitor must interact with CAPTCHA widget
↓
CAPTCHA solved
↓
cf_clearance cookie issued
Was Besucher erleben
Jeder Besucher sieht eine ganzseitige Herausforderung mit einem drehkreuzähnlichen Widget:
<!-- Interactive Challenge page -->
<body>
<div id="challenge-running">
<div class="main-wrapper">
<h2>Please verify you are human</h2>
<!-- Always-visible challenge widget -->
<div class="challenge-widget">
<!-- Checkbox + verification -->
</div>
</div>
</div>
</body>
Warum Cloudflare davon abrät
| Problem | Auswirkungen |
|---|---|
| Immer sichtbar | 100 % der Besucher sehen die Herausforderung |
| Höhere Reibung | Jeder Besucher muss interagieren |
| Höhere Absprungrate | Benutzer verlassen den Vorgang, anstatt ihn abzuschließen |
| Keine Risikoanpassung | Bekanntermaßen gute Besucher werden ebenfalls herausgefordert |
| Bedenken hinsichtlich der Barrierefreiheit | Jeder Besucher muss die Interaktion abschließen |
Erkennung: Vor welcher Herausforderung stehe ich?
import requests
import re
def identify_challenge_type(url):
"""Determine if a URL uses Managed or Interactive Challenge."""
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 Chrome/120.0.0.0",
"Accept": "text/html,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
}
response = requests.get(url, headers=headers, timeout=15, allow_redirects=False)
html = response.text
status = response.status_code
result = {
"url": url,
"status": status,
"challenge_type": None,
"cf_ray": response.headers.get("cf-ray", ""),
"solve_method": None,
}
if status == 200:
# Check for inline Turnstile widget (not a challenge page)
if "cf-turnstile" in html:
result["challenge_type"] = "turnstile_widget"
result["solve_method"] = "turnstile"
else:
result["challenge_type"] = "none"
return result
if status == 503:
# 503 indicates Managed Challenge or IUAM
if "managed" in html or "challenge-platform" in html:
result["challenge_type"] = "managed_challenge"
result["solve_method"] = "turnstile" # Managed renders as Turnstile
elif "jschl" in html:
result["challenge_type"] = "iuam_js_challenge"
result["solve_method"] = "cloudflare_challenge"
else:
result["challenge_type"] = "unknown_503"
return result
if status == 403:
if "challenge" in html.lower():
result["challenge_type"] = "interactive_challenge"
result["solve_method"] = "turnstile"
else:
result["challenge_type"] = "waf_block"
result["solve_method"] = None # Hard block, not solvable
return result
return result
# Usage
info = identify_challenge_type("https://protected-site.com/login")
print(f"Challenge: {info['challenge_type']}")
print(f"Solve with: {info['solve_method']}")
Erkennungstabelle
| Signal | Herausforderung gemanagt | Interaktive Herausforderung | IUAM | WAF-Block |
|---|---|---|---|---|
| HTTP-Status | 503 | 403 | 503 | 403 |
challenge-platform in HTML |
✅ | ✅ | ❌ | ❌ |
managed-Pfad im Skript |
✅ | ❌ | ❌ | ❌ |
jschl in HTML |
❌ | ❌ | ✅ | ❌ |
| Zeigt immer das Widget an | ❌ | ✅ | ❌ | ❌ |
| Unsichtbarer Pass möglich | ✅ | ❌ | ❌ | ❌ |
Lösen Sie jeden Herausforderungstyp
Lösung einer verwalteten Herausforderung
Verwaltete Herausforderungen werden normalerweise als Drehkreuz-Widgets dargestellt. Verwenden Sie die turnstile-Methode von CaptchaAI:
import requests
import time
API_KEY = "YOUR_API_KEY"
def solve_managed_challenge(url, sitekey=None):
"""Solve Cloudflare Managed Challenge."""
# If sitekey not provided, extract from page
if not sitekey:
import re
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 Chrome/120.0.0.0",
}
page = requests.get(url, headers=headers, timeout=15)
match = re.search(
r'data-sitekey=["\']([0-9x][A-Za-z0-9_-]+)["\']', page.text
)
sitekey = match.group(1) if match else None
if not sitekey:
# No visible Turnstile — try cloudflare_challenge method
return solve_js_challenge(url)
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "turnstile",
"sitekey": sitekey,
"pageurl": url,
"json": 1,
})
task_id = submit.json()["request"]
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY,
"action": "get",
"id": task_id,
"json": 1,
}).json()
if result.get("status") == 1:
return result["request"]
raise TimeoutError("Solve timed out")
def solve_js_challenge(url):
"""Fallback to cloudflare_challenge method."""
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "cloudflare_challenge",
"sitekey": "managed",
"pageurl": url,
"json": 1,
})
task_id = submit.json()["request"]
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY,
"action": "get",
"id": task_id,
"json": 1,
}).json()
if result.get("status") == 1:
return result["request"]
raise TimeoutError("Solve timed out")
Interaktive Herausforderung lösen
Interactive Challenge zeigt immer ein sichtbares Widget an. Verwenden Sie dieselbe turnstile-Methode:
def solve_interactive_challenge(url, sitekey):
"""Solve Cloudflare Interactive Challenge (legacy)."""
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "turnstile",
"sitekey": sitekey,
"pageurl": url,
"json": 1,
})
task_id = submit.json()["request"]
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY,
"action": "get",
"id": task_id,
"json": 1,
}).json()
if result.get("status") == 1:
return result["request"]
raise TimeoutError("Solve timed out")
Node.js (beide Typen)
const axios = require("axios");
const API_KEY = "YOUR_API_KEY";
async function solveCloudflareChallenge(url, type = "managed") {
const method = type === "js_challenge" ? "cloudflare_challenge" : "turnstile";
const sitekey =
type === "js_challenge" ? "managed" : await extractSitekey(url);
const submit = await axios.post("https://ocr.captchaai.com/in.php", null, {
params: {
key: API_KEY,
method,
sitekey: sitekey || "managed",
pageurl: url,
json: 1,
},
});
const taskId = submit.data.request;
for (let i = 0; i < 60; i++) {
await new Promise((r) => setTimeout(r, 5000));
const result = await axios.get("https://ocr.captchaai.com/res.php", {
params: { key: API_KEY, action: "get", id: taskId, json: 1 },
});
if (result.data.status === 1) {
return result.data.request;
}
}
throw new Error("Solve timed out");
}
async function extractSitekey(url) {
try {
const response = await axios.get(url, {
headers: { "User-Agent": "Mozilla/5.0 Chrome/120.0.0.0" },
validateStatus: () => true,
});
const match = response.data.match(
/data-sitekey=["']([0-9x][A-Za-z0-9_-]+)["']/
);
return match ? match[1] : null;
} catch {
return null;
}
}
Migration von Interactive zu Managed
Cloudflare empfiehlt die Migration von Interactive zu Managed Challenge. Wenn eine Site, die Sie automatisieren, Switches:
| Veränderung | Auswirkung auf die Automatisierung |
|---|---|
| Interaktiv → verwaltet | Kann unsichtbar passieren (ca. 90 % Chance) |
| HTTP 403 → 503 | Statuscodeprüfungen aktualisieren |
| Immer sichtbares → adaptiv | Das Widget ist möglicherweise nicht in HTML |
| Gleicher Sitekey | Der Lösungscode CaptchaAI bleibt gleich |
| Gleiche cf_clearance-Ausgabe | Der Umgang mit Cookies bleibt gleich |
Fehlerbehebung
| Symptom | Ursache | Beheben |
|---|---|---|
| 503 ohne sichtbares Widget | Managed Challenge wurde unsichtbar bestanden | Es sind keine Maßnahmen erforderlich – Sie haben bestanden |
| 503 mit „Überprüfen Sie Ihren Browser“ | Zur JS-Herausforderung erhoben | Verwenden Sie die Methode cloudflare_challenge |
| 403 mit sichtbarem CAPTCHA | Interaktive Herausforderung (Legacy) | Verwenden Sie die Methode turnstile |
| 403 ohne Herausforderung | WAF-Block, keine Herausforderung | Ändern Sie die IP oder das Anforderungsmuster |
| Der Herausforderungstyp ändert sich zufällig | Bewältigte Herausforderung, sich an Signale anzupassen | Bewältigen Sie sowohl die Turnstile- als auch die JS-Herausforderung |
| cf_clearance von einem Typ für den anderen abgelehnt | Unterschiedliche Challenge-Flows, gleiche Domäne | Lösen Sie die jeweilige Herausforderung |
Häufig gestellte Fragen
Sollte ich Managed Challenge immer zuerst ausprobieren?
Ja. Die meisten Websites verwenden jetzt Managed Challenge. Beginnen Sie mit der Methode turnstile und greifen Sie auf cloudflare_challenge zurück, wenn auf der Seite eine JavaScript-Herausforderung angezeigt wird (503 mit „Überprüfen Sie Ihren Browser“).
Kann eine Website beide Typen auf verschiedenen Seiten verwenden?
Ja, aber es ist ungewöhnlich. Jede WAF-Regel kann eine andere Aktion haben. Eine Regel könnte Managed Challenge für /login und Interactive Challenge für /api/ verwenden.
Benötigt Managed Challenge noch ein cf_clearance-Cookie?
Ja. Beide Challenge-Typen erzeugen das gleiche cf_clearance-Cookie. Die Cookie-Verarbeitung ist unabhängig vom Challenge-Typ identisch.
Was passiert, wenn die Managed Challenge unsichtbar an mir vorbeigeht?
Wenn Managed Challenge entscheidet, dass Ihre Anfrage ein geringes Risiko aufweist, wird die Anfrage ohne sichtbare Herausforderung weitergeleitet. Ihre Antwort wird mit dem Seiteninhalt eine normale 200 sein. In diesem Fall ist keine CaptchaAI-Lösung erforderlich.
Ist Interactive Challenge veraltet?
Cloudflare hat es nicht offiziell abgeschafft, empfiehlt aber Managed Challenge für alle neuen Regeln. Aus Gründen der Abwärtskompatibilität bleibt Interactive Challenge bestehen. Websites können jederzeit migriert werden.
Zusammenfassung
Die Managed Challenge von Cloudflare wählt adaptiv den Challenge-Schwierigkeitsgrad pro Besucher aus (unsichtbar bis zur vollständigen JS-Challenge), während Interactive Challenge immer ein sichtbares CAPTCHA präsentiert. Beide erzeugen das gleiche cf_clearance-Cookie und werden gelöst mit CaptchaAI– Verwenden Sie turnstile für die meisten Herausforderungen und cloudflare_challenge für JavaScript-Herausforderungsseiten. Managed Challenge ist der moderne Standard; Interactive Challenge ist ein Vermächtnis.
Verwandte Artikel
- Cloudflare-Browser-Integritätsprüfung vs. CAPTCHA-Challenge
- Cloudflare Challenge: Wie es funktioniert
- GeeTest vs. reCAPTCHA Vergleich