Explainers

Umgang mit Cloudflare im Angriffsmodus

Der „I'm Under Attack Mode“ (IUAM) von Cloudflare ist ein DDoS-Schutz, der jeden Besucher durch eine 5-sekündige JavaScript-Herausforderung zwingt, bevor er auf die Website zugreift. Dabei handelt es sich um den aggressivsten Cloudflare-Schutzmodus, der von Seitenbetreibern bei Angriffen manuell ausgelöst oder auf Hochrisikoseiten dauerhaft aktiviert wird. Für den automatisierten Zugriff erstellt IUAM eine obligatorische JavaScript-Herausforderung, die herkömmliche HTTP-Clients nicht bestehen können.


Was IUAM macht

Wenn ein Website-Betreiber den „Ich werde angegriffen-Modus“ im Cloudflare-Dashboard aktiviert:

Every request → Cloudflare edge
    ↓
JavaScript challenge page served (HTTP 503)
    ↓
Browser executes JavaScript challenge (~5 seconds)
    ↓
Challenge answer submitted automatically
    ↓
cf_clearance cookie set
    ↓
Original page loaded with cf_clearance cookie

Die IUAM-Challenge-Seite

Die Challenge-Seite gibt HTTP 503 zurück und enthält:

Element Zweck
jschl_vc Fordern Sie den Bestätigungscode an
pass Timing-Token (erzwingt eine Wartezeit von 5 Sekunden)
jschl_answer Mit JavaScript berechnete Antwort
cf_chl_opt Herausforderungsoptionen
ray Cloudflare Ray-ID für die Anfrage
„Überprüfen Sie Ihren Browser, bevor Sie darauf zugreifen …“ Sichtbare Nachricht für Benutzer

Hauptmerkmale

  • HTTP 503-Statuscode (NICHT 403)
  • 5 Sekunden obligatorische Wartezeit vor der Einreichung der Herausforderung
  • JavaScript-Ausführung erforderlich – einfache HTTP-Clients schlagen fehl
  • cf_clearance-Cookie – gültig für ca. 30 Minuten, ermöglicht nachfolgende Anfragen
  • Domainweit – jede Seite der Domain zeigt die Herausforderung

Identifizierung von IUAM im Vergleich zu anderen Cloudflare-Schutzmaßnahmen

import requests

def identify_cloudflare_protection(url):
    """Distinguish IUAM from other Cloudflare protections."""
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                      "AppleWebKit/537.36 Chrome/120.0.0.0",
    }

    response = requests.get(url, headers=headers, timeout=15, allow_redirects=False)
    html = response.text
    status = response.status_code

    if status == 503 and "jschl" in html:
        return "IUAM (I'm Under Attack Mode)"

    if status == 503 and "challenge-platform" in html:
        return "Managed Challenge"

    if status == 403 and "cf-ray" in str(response.headers):
        return "Blocked by WAF/Bot Management"

    if "cf-turnstile" in html:
        return "Turnstile widget"

    if "challenges.cloudflare.com" in html:
        return "Cloudflare challenge (generic)"

    if status == 200:
        return "No challenge (passed)"

    return f"Unknown (status: {status})"

Erkennungstabelle

Signal IUAM Herausforderung gemanagt Drehkreuz WAF-Block
HTTP-Status 503 503 200 403
jschl im Textkörper
5 Sekunden warten Manchmal
cf_clearance gesetzt Nach dem Lösen Nach dem Lösen
Challenge-Seite Ganze Seite Ganze Seite Nur Widget Fehlerseite
Erfordert JS

So funktioniert die JavaScript-Challenge

Die JavaScript-Challenge von IUAM soll überprüfen, ob der Besucher einen echten Browser hat:

Herausforderungsfluss

  1. Cloudflare stellt die Herausforderungsseite mit verschleiertem JavaScript bereit
  2. JavaScript führt Berechnungen durch: - Mathematische Operationen an Zeichenfolgen aus der Seite - DOM-Messungen - Durchsetzung des Timings (mindestens 4–5 Sekunden)
  3. Antwort berechnet – ein numerischer Wert basierend auf der Herausforderung
  4. Formular automatisch übermittelt an Cloudflare mit jschl_vc, pass und jschl_answer
  5. Cloudflare validiert Antwort und Zeitpunkt
  6. cf_clearance-Cookie zurückgegeben – ermöglicht den Zugriff für ca. 30 Minuten

Warum HTTP-Clients scheitern

# This will ALWAYS get the challenge page:
import requests
response = requests.get("https://iuam-protected-site.com")
# response.status_code == 503
# response.text contains "Checking your browser..."

# Plain HTTP clients cannot:
# - Execute JavaScript
# - Compute the challenge answer
# - Meet the timing requirement
# - Generate the required cookies

IUAM mit CaptchaAI lösen

Methode 1: Cloudflare Challenge-Solver (empfohlen)

Die cloudflare_challenge-Methode von CaptchaAI behandelt IUAM-Herausforderungen direkt:

import requests
import time

API_KEY = "YOUR_API_KEY"
TARGET_URL = "https://iuam-protected-site.com/data"

# Step 1: Submit challenge to CaptchaAI
submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "cloudflare_challenge",
    "sitekey": "managed",
    "pageurl": TARGET_URL,
    "json": 1,
})

task_id = submit.json()["request"]
print(f"Task submitted: {task_id}")

# Step 2: Poll for result
for attempt 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:
        token = result["request"]
        print(f"Challenge solved! Token: {token[:50]}...")
        break
    elif result.get("request") == "ERROR_CAPTCHA_UNSOLVABLE":
        print("Challenge could not be solved")
        break
else:
    print("Timed out waiting for solution")

# Step 3: Use cf_clearance cookie or token
# The response contains the clearance data needed to access the site

Methode 2: Browser-Automatisierung mit CaptchaAI

Kombinieren Sie für dauerhafte Sitzungen einen Headless-Browser mit CaptchaAI:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import requests
import time

API_KEY = "YOUR_API_KEY"

# Launch browser
options = webdriver.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(options=options)

# Navigate to IUAM page
driver.get("https://iuam-protected-site.com")

# Wait for challenge page to load
time.sleep(3)

# Check if IUAM challenge is present
if "Checking your browser" in driver.page_source or driver.title == "Just a moment...":
    print("IUAM challenge detected")

    # Option A: Wait for browser to solve natively (if not headless)
    try:
        WebDriverWait(driver, 15).until(
            lambda d: "Checking your browser" not in d.page_source
        )
        print("Challenge passed natively")
    except:
        print("Native solve failed — using CaptchaAI")
        # Submit to CaptchaAI for solving
        # Token submission via JavaScript injection

# After challenge is passed, extract cookies for API use
cookies = driver.get_cookies()
cf_clearance = next(
    (c["value"] for c in cookies if c["name"] == "cf_clearance"), None
)

if cf_clearance:
    print(f"cf_clearance obtained: {cf_clearance[:30]}...")

    # Use cookie with requests library
    session = requests.Session()
    for cookie in cookies:
        session.cookies.set(cookie["name"], cookie["value"])
    session.headers.update({
        "User-Agent": driver.execute_script("return navigator.userAgent"),
    })

    # Now make requests with the clearance cookie
    response = session.get("https://iuam-protected-site.com/api/data")
    print(f"Status: {response.status_code}")

driver.quit()

Node.js

const axios = require("axios");

const API_KEY = "YOUR_API_KEY";
const TARGET_URL = "https://iuam-protected-site.com/data";

async function solveIUAM() {
  // Submit challenge
  const submit = await axios.post("https://ocr.captchaai.com/in.php", null, {
    params: {
      key: API_KEY,
      method: "cloudflare_challenge",
      sitekey: "managed",
      pageurl: TARGET_URL,
      json: 1,
    },
  });

  const taskId = submit.data.request;
  console.log(`Task submitted: ${taskId}`);

  // Poll for result
  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) {
      console.log("IUAM challenge solved!");
      return result.data.request;
    }
  }

  throw new Error("Timed out");
}

solveIUAM().then((token) => console.log("Token:", token.substring(0, 50)));

Verwalten von cf_clearance-Cookies

Das cf_clearance-Cookie ist das wichtigste Ergebnis bei der Lösung einer IUAM-Herausforderung:

Eigentum Wert
Cookie-Name cf_clearance
Lebenslang ~30 Minuten (vom Standort konfigurierbar)
Umfang Domainweit
Gebunden an IP-Adresse + User-Agent
Wiederverwendbar Ja, ein Leben lang
Übertragbar Nur mit gleicher IP + UA
import requests
import time

class IUAMSessionManager:
    """Manage cf_clearance cookies for IUAM-protected sites."""

    def __init__(self, api_key, target_url, user_agent=None):
        self.api_key = api_key
        self.target_url = target_url
        self.user_agent = user_agent or (
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
            "AppleWebKit/537.36 Chrome/120.0.0.0"
        )
        self.session = requests.Session()
        self.session.headers["User-Agent"] = self.user_agent
        self.clearance_time = 0
        self.clearance_lifetime = 1800  # 30 minutes default

    def needs_refresh(self):
        """Check if clearance cookie needs refreshing."""
        return time.time() - self.clearance_time > self.clearance_lifetime - 60

    def solve_challenge(self):
        """Solve IUAM challenge and update session cookies."""
        submit = requests.post("https://ocr.captchaai.com/in.php", data={
            "key": self.api_key,
            "method": "cloudflare_challenge",
            "sitekey": "managed",
            "pageurl": self.target_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": self.api_key,
                "action": "get",
                "id": task_id,
                "json": 1,
            }).json()

            if result.get("status") == 1:
                # Apply clearance to session
                self.clearance_time = time.time()
                return result["request"]

        raise TimeoutError("IUAM solve timed out")

    def get(self, url, **kwargs):
        """Make a GET request, solving IUAM if needed."""
        if self.needs_refresh():
            self.solve_challenge()
        return self.session.get(url, **kwargs)

Fehlerbehebung

Symptom Ursache Beheben
Herausforderungsschleifen endlos IP wurde nach Erhalt der Freigabe geändert Verwenden Sie eine konsistente IP für Lösung und Zugriff
cf_clearance abgelehnt Nichtübereinstimmung zwischen Benutzer und Agent Verwenden Sie denselben Benutzeragenten für Lösungen und Anfragen
503 bleibt nach der Lösung bestehen Cookie abgelaufen (>30 Min.) Aktualisieren Sie die Freigabe vor Ablauf
Challenge-Seite anders als erwartet Die Site verwendet Managed Challenge, nicht IUAM Wechseln Sie zur Turnstile-Solver-Methode
Mehrere Herausforderungsseiten Die erste Herausforderung ist IUAM, die zweite das Drehkreuz Lösen Sie beides nacheinander

Häufig gestellte Fragen

Wie lange dauert cf_clearance?

Der Standardwert beträgt 30 Minuten, Websitebetreiber können jedoch einen Wert zwischen 15 Minuten und 24 Stunden konfigurieren. Die meisten Websites verwenden die 30-Minuten-Standardeinstellung. Planen Sie eine Aktualisierung vor Ablauf ein.

Kann ich cf_clearance zwischen Anfragen teilen?

Ja, aber nur von derselben IP-Adresse und mit derselben User-Agent-Zeichenfolge. Wenn Sie eines davon ändern, wird das Cookie ungültig.

Ist der „Unter Angriff“-Modus immer aktiviert?

Nein. Seitenbetreiber schalten es bei Angriffen manuell um. Einige Websites lassen es als zusätzliche Sicherheitsebene dauerhaft aktiviert. Es gibt keine Möglichkeit vorherzusagen, ob auf einer Website IUAM aktiv sein wird.

Was ist der Unterschied zwischen IUAM und einer Managed Challenge?

IUAM fordert jeden Besucher bedingungslos heraus. Managed Challenges nutzen die Bot-Bewertung von Cloudflare, um verdächtigen Datenverkehr selektiv herauszufordern. IUAM gibt bei einer JS-Challenge immer 503 zurück. Verwaltete Herausforderungen können stattdessen 503 mit einem Drehkreuz-Widget zurückgeben.

Beeinflusst IUAM API-Endpunkte?

Ja. IUAM gilt für jede Anfrage in der Domäne, einschließlich API-Endpunkten. Aus diesem Grund schlagen API-Anfragen von Nicht-Browser-Clients fehl – ​​sie können die JavaScript-Herausforderung nicht ausführen.


Zusammenfassung

Der Under Attack-Modus von Cloudflare erstellt eine obligatorische JavaScript-Herausforderung für alle Besucher und gibt HTTP 503 mit einer Rechenanforderung von 5 Sekunden zurück. Lösen Sie IUAM-Herausforderungen mit dem Cloudflare Challenge-Solver von CaptchaAI, und verwenden Sie dann das Cookie cf_clearance für nachfolgende Anfragen innerhalb des 30-Minuten-Fensters. Passen Sie immer die IP-Adresse und den User-Agent zwischen Lösung und Nutzung an.

Verwandte Artikel

  • Cloudflare Challenge: Wie es funktioniert
  • Cloudflare Challenge cf_clearance Cookie-Leitfaden
  • Cloudflare Managed vs. Interactive Challenge
Kommentare sind für diesen Artikel deaktiviert.

Verwandte Beiträge

Explainers Cloudflare WAF-Regeln, die CAPTCHA-Herausforderungen auslösen
Cloudflare WAF-Regeln, die CAPTCHA-Challenges auslösen: Welche Aktionen Turnstile, JS-Challenge oder harte Blockierungen erzeugen und wie man sie behandelt.

Cloudflare WAF-Regeln, die CAPTCHA-Challenges auslösen: Welche Aktionen Turnstile, JS-Challenge oder harte Blo...

Apr 24, 2026