Karşılaştırmalar

Cloudflare Yönetilen Mücadele ve İnteraktif Mücadele

Cloudflare, site operatörlerinin WAF kurallarında yapılandırabileceği iki sorgulama eylemi sunar: Yönetilen Mücadele ve Etkileşimli Mücadele. Yönetilen Mücadele, modern ve uyarlanabilir bir yaklaşımdır; Cloudflare, ziyaretçi başına zorluğa karar verir. Etkileşimli Mücadele, her zaman görünür bir CAPTCHA sunan eski seçenektir. Farkı anlamak, hangi CaptchaAI yönteminin kullanılacağını ve otomasyon sırasında ne bekleneceğini belirler.


Hızlı karşılaştırma

Özellik Yönetilen Mücadele İnteraktif Mücadele
Tanıtıldı 2021 Eski (2021 öncesi)
Uyarlanabilir mi? Evet (Cloudflare ziyaretçi başına karar verir) Hayır (her zaman etkileşimli)
Görünmez geçiş mümkün mü? Evet (ziyaretçilerin ~%90'ı görünmez bir şekilde geçer) Hayır (her zaman CAPTCHA'yı gösterir)
Kullanılan zorluk türleri Görünmez → Turnstile → JS mücadelesi Her zaman görünür CAPTCHA
Cloudflare tarafından mı önerildi? Evet (yeni kurallar için varsayılan) Hayır (geriye dönük uyumluluk için korunur)
Kullanıcı sürtünmesi Düşük (çoğu hiçbir şey görmeden geçer) Yüksek (her zaman etkileşim gerektirir)
HTTP durumu 503 403
CaptchaAI yöntemi turnstile veya cloudflare_challenge turnstile

Yönetilen Mücadele (modern)

Yönetilen Mücadele, Cloudflare'in önerilen meydan okuma eylemidir. Mümkün olan en az yıkıcı zorluğu sunmak için bir karar çerçevesi kullanır:

Karar akışı

WAF rule triggers Managed Challenge
    ↓
Cloudflare evaluates visitor signals:
  ├─ Browser test profil yapılandırması quality
  ├─ IP reputation score
  ├─ TLS test profil yapılandırması (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
    ↓
qa_session_cookie cookie issued

Ziyaretçilerin yaşadıkları

Ziyaretçi türü Ne görüyorlar Yüzde
Normal tarayıcı, iyi IP Hiçbir şey (görünmez geçiş) ~%90
Yeni tarayıcı, nötr IP Kısa döndürücü ~%5
Şüpheli sinyaller Turnstile onay kutusu ~%4
Yüksek riskli sinyaller "Tarayıcınız kontrol ediliyor..." sayfası ~%1

HTML çıktısı

Yönetilen Mücadele sayfaları Cloudflare'in meydan okuma platformunu kullanır:

<!-- 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>

İnteraktif Mücadele (eski)

İnteraktif Mücadele her zaman ziyaretçinin etkileşimde bulunması gereken görünür bir CAPTCHA sunar. Görünmez bir geçiş yoktur; her ziyaretçi görür ve bu mücadeleyi tamamlamalıdır.

Nasıl çalışır?

WAF rule triggers Interactive Challenge
    ↓
Full-page CAPTCHA served (HTTP 403)
    ↓
Visitor must interact with CAPTCHA widget
    ↓
CAPTCHA solved
    ↓
qa_session_cookie cookie issued

Ziyaretçilerin yaşadıkları

Her ziyaretçi Turnstile benzeri bir widget içeren tam sayfa bir meydan okumayla karşılaşır:

<!-- 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>

Cloudflare neden bunu caydırıyor?

Sorun Etki
Her zaman görünür Ziyaretçilerin %100'ü bu zorluğu görüyor
Daha yüksek sürtünme Her ziyaretçi etkileşime girmelidir
Daha yüksek hemen çıkma oranı Kullanıcılar tamamlamak yerine ayrılıyor
Risk adaptasyonu yok İyi olduğu bilinen ziyaretçiler de zor durumda kalıyor
Erişilebilirlik endişeleri Her ziyaretçi etkileşimi tamamlamalıdır

Tespit: Hangi zorlukla karşı karşıyayım?

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']}")

Algılama tablosu

Sinyal Yönetilen Mücadele İnteraktif Mücadele IUAM WAF Bloğu
HTTP durumu 503 403 503 403
HTML'de challenge-platform
Komut dosyasındaki managed yolu
HTML'de jschl
Her zaman widget'ı gösterir
Görünmez geçiş mümkün

Her zorluk türünü çözme

Yönetilen Mücadeleyi Çözme

Yönetilen Mücadeleler genellikle Turnstile widget'ları olarak işlenir. CaptchaAI'nin turnstile yöntemini kullanın:

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")

İnteraktif Mücadeleyi Çözme

İnteraktif Mücadele her zaman görünür bir widget gösterir. Aynı turnstile yöntemini kullanın:

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 (her iki tür)

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;
  }
}

Etkileşimli'den Yönetilen'e Geçiş

Cloudflare, Interactive'den Managed Challenge'a geçmenizi önerir. Otomatikleştirdiğiniz bir site geçiş yapıyorsa:

Değiştir Otomasyon üzerindeki etkisi
Etkileşimli → Yönetilen Görünmez bir şekilde geçmeye başlayabilir (~%90 şans)
HTTP 403 → 503 Durum kodu kontrollerini güncelleyin
Her zaman görünür → uyarlanabilir Widget HTML'de olmayabilir
Aynı site anahtarı CaptchaAI çözüm kodu aynı kalıyor
Aynı qa_session_cookie çıktısı Çerez kullanımı aynı kalıyor

Hızlı dedektör iş akışı

  • Sayfanın bir geçiş reklamı sayfası gösterip göstermediğini veya uygulama akışına bir widget katıştırıp yerleştirmediğini kontrol edin.
  • İşleme yoluna karar vermeden önce cf-chl işaretleyicilerini, Turnstile kaplarını ve geri arama kancalarını arayın.
  • Tekrarlanan hedef değişikliklerinin hızla görülebilmesi için algılama sonucunu sayfa URL'si ve proxy kimliğiyle günlüğe kaydedin.

Sorun giderme

Belirti Sebep Düzeltme
Görünür widget içermeyen 503 Yönetilen Mücadele görünmez bir şekilde geçti Hiçbir işlem yapmanıza gerek yok; geçtiniz
"Tarayıcınız kontrol ediliyor" ile 503 Yönetilen, JS mücadelesine yükseltildi cloudflare_challenge yöntemini kullanın
Görünür CAPTCHA'lı 403 İnteraktif Mücadele (eski) turnstile yöntemini kullanın
403 hiçbir meydan okuma olmadan WAF bloğu, zorluk değil IP'yi veya istek modelini değiştirin
Mücadele türü rastgele değişir Sinyallere uyum sağlayan Yönetilen Zorluk Hem Turnstile hem de JS sorununun üstesinden gelin
bir türden qa_session_cookie diğer tür için reddedildi Farklı zorluk akışları, aynı alan Hangi zorluk sunulursa sunulsun çözün

Sık sorulan sorular

Her zaman önce Managed Challenge'ı denemeli miyim?

Evet. Artık çoğu site Managed Challenge'ı kullanıyor. turnstile yöntemiyle başlayın ve sayfada bir JavaScript sorgulaması gösteriliyorsa ("Tarayıcınızı kontrol etme" ile 503) cloudflare_challenge'ye geri dönün.

Bir site her iki türü de farklı sayfalarda kullanabilir mi?

Evet ama nadir görülen bir durum. Her WAF kuralının farklı bir eylemi olabilir. Bir kural, /login için Yönetilen Mücadeleyi ve /api/ için Etkileşimli Mücadeleyi kullanabilir.

Evet. Her iki meydan okuma türü de aynı qa_session_cookie çerezini üretir. Çerezlerin işlenmesi, sorgulama türünden bağımsız olarak aynıdır.

Ya Yönetilen Mücadele beni görünmez bir şekilde geçerse?

Managed Challenge, isteğinizin düşük riskli olduğuna karar verirse isteği görünür bir itiraz olmadan iletir. Yanıtınız sayfa içeriğine göre normal 200 olacaktır. Bu durumda CaptchaAI çözümüne gerek yoktur.

İnteraktif Mücadele kullanımdan kaldırılıyor mu?

Cloudflare bu özelliği resmi olarak kaldırmadı ancak tüm yeni kurallar için Managed Challenge'ı öneriyor. Etkileşimli Mücadele geriye dönük uyumluluk için kalır. Siteler herhangi bir zamanda taşınabilir.


Özet

Cloudflare'in Yönetilen Mücadelesi, ziyaretçi başına meydan okuma zorluğunu uyarlanabilir bir şekilde seçer (tam JS mücadelesinde görünmez), İnteraktif Mücadele ise her zaman görünür bir CAPTCHA sunar. Her ikisi de aynı qa_session_cookie çerezini üretir veCaptchaAI— çoğu zorluk için turnstile'yi ve JavaScript meydan okuma sayfaları için cloudflare_challenge'yi kullanın. Yönetilen Mücadele modern varsayılandır; İnteraktif Mücadele bir mirastır.

İlgili Makaleler

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