Teknik Açıklamalar

Saldırı Modunda Cloudflare Nasıl Kullanılır

Cloudflare'in "Saldırı Modundayım" (IUAM), her ziyaretçiyi siteye erişmeden önce 5 saniyelik bir JavaScript sorgulamasına zorlayan bir DDoS savunmasıdır. Saldırılar sırasında site operatörleri tarafından manuel olarak tetiklenen veya yüksek riskli sitelerde kalıcı olarak etkinleştirilen en agresif Cloudflare koruma modudur. Otomatik erişim için IUAM, geleneksel HTTP istemcilerinin geçemeyeceği zorunlu bir JavaScript sorgulaması oluşturur.


IUAM ne yapar?

Bir site operatörü Cloudflare kontrol panelinde "Saldırı Modundayım" seçeneğini etkinleştirdiğinde:

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

IUAM meydan okuma sayfası

Sınama sayfası HTTP 503'ü döndürür ve şunları içerir:

Öğe Amaç
jschl_vc Doğrulama koduna meydan okuyun
pass Zamanlama jetonu (5 saniyelik beklemeyi zorunlu kılar)
jschl_answer JavaScript tarafından hesaplanan yanıt
cf_chl_opt Mücadele seçenekleri
ray İstek için Cloudflare Ray ID
"Erişmeden önce tarayıcınız kontrol ediliyor..." Kullanıcılara görünür mesaj

Temel özellikler

  • HTTP 503 durum kodu (403 DEĞİL)
  • Meydan okumadan önce 5 saniyelik zorunlu bekleme
  • JavaScript yürütmesi gerekiyor — düz HTTP istemcileri başarısız oluyor
  • qa_session_cookie çerezi — ~30 dakika süreyle geçerlidir, sonraki isteklere izin verir
  • Alan çapında — Alandaki her sayfa, zorluğu gösterir

IUAM ve diğer Cloudflare korumalarını belirleme

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 doğrulama akışı (generic)"

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

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

Algılama tablosu

Sinyal IUAM Yönetilen Mücadele Turnstile WAF Bloğu
HTTP durumu 503 503 200 403
jschl gövdede
5 saniye bekleme Bazen
qa_session_cookie seti Çözdükten sonra Çözdükten sonra
Meydan okuma sayfası Tam sayfa Tam sayfa Yalnızca widget Hata sayfası
JS gerektirir

JavaScript mücadelesi nasıl çalışır?

IUAM'ın JavaScript testi, ziyaretçinin gerçek bir tarayıcıya sahip olduğunu doğrulamak için tasarlanmıştır:

Mücadele akışı

  1. Cloudflare, karmaşık JavaScript içeren meydan okuma sayfası sunuyor
  2. JavaScript hesaplamaları gerçekleştirir: - Sayfadaki dizeler üzerinde matematiksel işlemler - DOM ölçümleri - Zamanlama uygulaması (minimum 4-5 saniye)
  3. Cevap hesaplanmıştır — zorluğa dayalı sayısal bir değer
  4. jschl_vc, pass ve jschl_answer ile Cloudflare'e otomatik olarak gönderilen form
  5. Cloudflare yanıtı ve zamanlamayı doğrular
  6. qa_session_cookie çerezi geri döndü — ~30 dakika süreyle erişime izin verir

HTTP istemcileri neden başarısız oluyor?

# 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'ı CaptchaAI ile çözme

Yöntem 1: Cloudflare doğrulama akışı çözücü (önerilir)

CaptchaAI'nin cloudflare_challenge yöntemi IUAM zorluklarını doğrudan ele alır:

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 qa_session_cookie cookie or token
# The response contains the clearance data needed to access the site

Yöntem 2: CaptchaAI ile tarayıcı otomasyonu

Kalıcı oturumlar için headless bir tarayıcıyı CaptchaAI ile birleştirin:

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("--no-sandbox")
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()
qa_session_cookie = next(
    (c["value"] for c in cookies if c["name"] == "qa_session_cookie"), None
)

if qa_session_cookie:
    print(f"qa_session_cookie obtained: {qa_session_cookie[: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)));

qa_session_cookie çerezi, bir IUAM sorununu çözmenin temel çıktısıdır:

Mülkiyet Değer
Çerez adı qa_session_cookie
ömür boyu ~30 dakika (site tarafından yapılandırılabilir)
Kapsam Alan çapında
Bağlı IP adresi + Kullanıcı Aracısı
Yeniden kullanılabilir Evet ömür boyu
Devredilebilir Yalnızca aynı IP + UA ile

Çerez yönetimi stratejisi

import requests
import time

class IUAMSessionManager:
    """Manage qa_session_cookie 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)

Sorun giderme

Belirti Sebep Düzeltme
Mücadele sonsuz bir şekilde döngüye giriyor İzin alındıktan sonra IP değişti Çözüm + erişim için tutarlı IP kullanın
qa_session_cookie reddedildi Kullanıcı-Aracı uyumsuzluğu Çözüm ve istekler için aynı Kullanıcı Aracısını kullanın
503 çözümden sonra da devam ediyor Çerezin süresi doldu (>30 dakika) Süresi dolmadan izni yenileyin
Mücadele sayfası beklenenden farklı Site, IUAM'ı değil Yönetilen Mücadeleyi kullanıyor Turnstile çözme yöntemine geç
Çoklu meydan okuma sayfaları İlk zorluk IUAM, ikincisi Turnstile Her ikisini de sırayla çözün

Sık sorulan sorular

Varsayılan süre 30 dakikadır ancak site operatörleri bu süreyi 15 dakikadan 24 saate kadar yapılandırabilir. Çoğu site varsayılan 30 dakikalık süreyi kullanır. Süresi dolmadan önce yenilemeyi planlayın.

Evet, ancak yalnızca aynı IP adresinden ve aynı Kullanıcı Aracısı dizesiyle. Bunlardan herhangi birinin değiştirilmesi çerezi geçersiz kılacaktır.

Saldırı Modu Altında her zaman etkin mi?

Hayır. Site operatörleri saldırılar sırasında manuel olarak geçiş yapar. Bazı siteler ekstra bir güvenlik katmanı olarak onu kalıcı olarak etkin bırakır. Bir sitede IUAM'ın etkin olup olmayacağını tahmin etmenin bir yolu yoktur.

IUAM ile Yönetilen Mücadele arasındaki fark nedir?

IUAM her ziyaretçiye koşulsuz meydan okuyor. Yönetilen Mücadeleler, şüpheli trafiğe seçici olarak meydan okumak için Cloudflare'in bot değerlendirmesini kullanır. IUAM her zaman bir JS sorgulamasıyla 503 değerini döndürür. Yönetilen Mücadeleler bunun yerine Turnstile widget'ıyla 503'ü döndürebilir.

IUAM, API uç noktalarını etkiler mi?

Evet. IUAM, API uç noktaları da dahil olmak üzere alandaki her istek için geçerlidir. Tarayıcı olmayan istemcilerden gelen API isteklerinin başarısız olmasının nedeni budur; JavaScript sorgulamasını yürütemezler.


Özet

Cloudflare'in Saldırı Altında Modu, tüm ziyaretçiler için zorunlu bir JavaScript sorgulaması oluşturur ve 5 saniyelik bir hesaplama gereksinimiyle HTTP 503'ü döndürür. IUAM zorluklarını şu şekilde çözün:CaptchaAI'nin Cloudflare doğrulama akışı çözücüsü, ardından 30 dakikalık süre içinde sonraki istekler için qa_session_cookie çerezini kullanın. Çözüm ve kullanım arasında daima IP adresini ve Kullanıcı Aracısını eşleştirin.

İlgili Makaleler

Bu makale için yorumlar devre dışı bırakılmıştır.