Hintergründe

So funktioniert Cloudflare Challenge

Die Cloudflare Challenge ist eine ganzseitige Sperrseite („Checking your browser …"), die Cloudflare bei verdächtigen Anfragen vor die Website schaltet. Erst wenn Ihr Browser die Prüfung besteht, setzt Cloudflare ein cf_clearance-Cookie – und genau dieses Cookie öffnet den Zugang für alle folgenden Anfragen.

Wichtig für die Automatisierung: Die Challenge ist kein eingebettetes Widget wie Turnstile. Sie ersetzt die komplette Seite und ist an IP-Adresse und User-Agent gebunden – lösen lässt sie sich daher nur mit einem passenden Proxy.


Cloudflare Challenge, Turnstile oder JS Challenge – wo liegt der Unterschied?

Cloudflare setzt mehrere Schutzmechanismen ein, die im Alltag gern verwechselt werden. Für die Automatisierung ist die Unterscheidung wichtig, denn nur die ganzseitige Challenge blockiert den kompletten Seitenzugriff:

Merkmal Cloudflare Challenge Turnstile JS Challenge
Typ Ganzseitiges Interstitial In-Page-Widget Stille Prüfung
Nutzer sieht „Checking your browser"-Seite Checkbox oder nichts Nichts
Blockiert den Seitenzugriff Ja Nein Kurzzeitig
Setzt cf_clearance Ja Manchmal Ja
Proxy zum Lösen nötig Ja Nein
Website nutzt Cloudflare-CDN Erforderlich Optional Erforderlich

Der Ablauf einer Cloudflare Challenge

Vom ersten Request bis zum geladenen Seiteninhalt durchläuft jede Anfrage denselben Weg:

Request → Cloudflare proxy → Suspicious? → Challenge page
                                              ↓
                                    Browser verification
                                              ↓
                                    cf_clearance cookie set
                                              ↓
                                    Original page loads
  1. Anfrage abgefangen – Cloudflares Reverse-Proxy nimmt jede Anfrage entgegen, bevor sie den Ursprungsserver erreicht
  2. Risikobewertung – IP-Reputation, HTTP-Header, TLS-Fingerprint und Verhaltensmuster fließen in eine Bewertung ein
  3. Challenge ausgeliefert – Bei Verdacht ersetzt eine Challenge-Seite die angeforderte Antwort
  4. Browser-Verifizierung – Im Browser laufen JavaScript-Prüfungen ab, die menschliches Verhalten prüfen
  5. Cookie gesetzt – Besteht der Browser die Prüfung, setzt Cloudflare das cf_clearance-Cookie mit konfigurierbarer TTL
  6. Zugriff gewährt – Der Browser lädt neu und erhält den ursprünglichen Seiteninhalt

Warum Cloudflare überhaupt eine Challenge zeigt

Ob eine Anfrage auf der Challenge-Seite landet, entscheiden mehrere Signale:

Auslöser Beschreibung
Rechenzentrums-IP Anfrage von bekannten Hosting-Anbietern
Fehlende Header Fehlende oder ungewöhnliche HTTP-Header
TLS-Fingerprint Der JA3/JA4-Fingerprint passt zu bekannten Bot-Signaturen
Hohe Anfragerate Zu viele Anfragen von derselben IP
Sicherheitsstufe Der Websitebetreiber setzt den Schwellenwert auf „hoch"
Länderregeln Geografische Sperr- oder Challenge-Regeln
Bot-Score Cloudflares ML-Bot-Score ist zu niedrig
Bekannte Bedrohung Die IP steht auf Threat-Intelligence-Listen

Beispiel aus der Praxis: Ein Scraping-Job auf einem Cloud-Server bei Hetzner oder netcup landet fast sofort auf der Challenge-Seite – Rechenzentrums-IPs stehen ganz oben auf Cloudflares Verdachtsliste. Über einen Residential-Proxy tritt die Challenge oft gar nicht erst auf. Beachten Sie außerdem: IP-Adressen gelten nach DSGVO als personenbezogen.


Nach bestandener Challenge erhält der Browser ein Cookie in dieser Form:

cf_clearance=abc123...; path=/; domain=.example.com; secure; HttpOnly; SameSite=None
Eigenschaft Bedeutung
Gültigkeitsdauer 15 Minuten bis 24 Stunden, je nach Konfiguration des Websitebetreibers
Geltungsbereich an die jeweilige Domain gebunden
Bindung fest verknüpft mit User-Agent und IP-Adresse aus der Verifizierung
Verwendung muss in jeder Folgeanfrage mitgeschickt werden, sonst erscheint die Challenge erneut

Warum ein Proxy Pflicht ist: Das cf_clearance-Cookie ist kryptografisch an drei Merkmale gebunden – weicht auch nur eines zwischen Lösung und Folgeanfrage ab, verwirft Cloudflare das Cookie:

  • IP-Adresse – Die Lösung muss von derselben IP kommen, die Sie anschließend nutzen
  • User-Agent – Der User-Agent der Lösung muss zu Ihren Anfragen passen
  • TLS-Fingerprint – Manche Konfigurationen prüfen zusätzlich TLS-Eigenschaften

Merken Sie sich: Ändern Sie nachträglich User-Agent oder IP-Adresse – etwa durch Proxy-Rotation –, wird das Cookie ungültig und die Challenge beginnt von vorne.


Cloudflare Challenge mit CaptchaAI lösen

Ein Proxy ist bei der Lösung Pflicht – aus dem eben genannten Grund. Sie übermitteln pageurl und Proxy, fragen den Status ab und erhalten das Cookie samt passendem User-Agent zurück.

Python

import requests
import time

API_KEY = "YOUR_API_KEY"

# Submit task — proxy is REQUIRED
response = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": API_KEY,
    "method": "cloudflare_challenge",
    "pageurl": "https://example.com/protected-page",
    "proxy": "username:password@proxy.example.com:8080",
    "proxytype": "HTTP",
    "json": 1
})

task_id = response.json()["request"]

# Poll for result
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:
        solution = result["request"]
        # solution contains cf_clearance cookie + user_agent
        print(f"cf_clearance: {solution}")
        break

Node.js

const axios = require('axios');

async function solveCloudflareChallenge(pageurl, proxy) {
  const { data } = await axios.get('https://ocr.captchaai.com/in.php', {
    params: {
      key: 'YOUR_API_KEY',
      method: 'cloudflare_challenge',
      pageurl,
      proxy,
      proxytype: 'HTTP',
      json: 1
    }
  });

  const taskId = data.request;

  for (let i = 0; i < 60; i++) {
    await new Promise(r => setTimeout(r, 5000));
    const res = await axios.get('https://ocr.captchaai.com/res.php', {
      params: { key: 'YOUR_API_KEY', action: 'get', id: taskId, json: 1 }
    });
    if (res.data.status === 1) return res.data.request;
  }
  throw new Error('Timeout');
}

Nutzen Sie für alle Folgeanfragen exakt denselben Proxy und User-Agent wie bei der Lösung:

# After getting the solution
cf_clearance = solution["cf_clearance"]
user_agent = solution["user_agent"]

# Use the SAME proxy and user agent for subsequent requests
session = requests.Session()
session.cookies.set("cf_clearance", cf_clearance, domain=".example.com")
session.headers["User-Agent"] = user_agent
session.proxies = {"https": "http://username:password@proxy.example.com:8080"}

# Now access the protected page
page = session.get("https://example.com/protected-page")
print(f"Status: {page.status_code}")

Häufige Fragen

Wie erkenne ich, ob eine Seite eine Cloudflare Challenge einsetzt?

An der ganzseitigen Sperrseite mit „Checking your browser …" und einer kurzen Wartezeit, bevor die Seite lädt. Im Netzwerk-Tab tauchen ein cf_clearance-Cookie und Cloudflare-Server-Header auf. Ein Kästchen mitten im Formular ist dagegen Turnstile.

Welchen Proxy-Typ brauche ich für die Cloudflare Challenge?

Einen Proxy, dessen IP nicht als Rechenzentrum erkannt wird. Residential- oder ISP-Proxys sind hier deutlich zuverlässiger als Rechenzentrums-Proxys, weil Letztere die Challenge häufig erst auslösen. Wichtig: Lösung und spätere Anfragen müssen über dieselbe IP laufen.

Löst CaptchaAI außer der Challenge auch Turnstile, hCaptcha oder GeeTest v4?

Cloudflare Turnstile und GeeTest v3 löst CaptchaAI regulär mit. hCaptcha und FunCaptcha werden nicht unterstützt; GeeTest v4 ist als „bald verfügbar" angekündigt, aber noch nicht nutzbar. CaptchaFox (Beta), Friendly Captcha (Beta) und Lemin (Beta) sind in der Erprobung.

Was kostet das Lösen der Cloudflare Challenge?

Es gibt keinen Aufpreis pro CAPTCHA-Typ: CaptchaAI rechnet Thread-basiert ab, nicht pro Lösung. BASIC kostet 15 $/Monat mit 5 Threads und unbegrenzten Lösungen; größere Tarife wie ADVANCE (90 $/Monat, 50 Threads) skalieren die parallele Verarbeitung.


Verwandte Leitfäden

Kommentare sind für diesen Artikel deaktiviert.