So Sánh

Thử thách được quản lý trên Cloudflare so với Thử thách tương tác

Cloudflare cung cấp hai hành động thử thách mà người vận hành trang web có thể định cấu hình trong quy tắc WAF: Thử thách được quản lýThử thách tương tác. Thử thách được quản lý là cách tiếp cận hiện đại, thích ứng — Cloudflare quyết định độ khó của mỗi khách truy cập. Thử thách tương tác là tùy chọn cũ, luôn hiển thị CAPTCHA hiển thị. Hiểu được sự khác biệt sẽ xác định phương pháp CaptchaAI nào sẽ sử dụng và những gì sẽ xảy ra trong quá trình tự động hóa.


So sánh nhanh

tính năng Thử thách được quản lý Thử thách tương tác
Giới thiệu 2021 Kế thừa (trước năm 2021)
Thích ứng? Có (Cloudflare quyết định cho mỗi khách truy cập) Không (luôn tương tác)
Có thể vượt qua vô hình? Có (~90% khách truy cập đi qua một cách vô hình) Không (luôn hiển thị CAPTCHA)
Các loại thử thách được sử dụng Thử thách → cửa quay vô hình → JS CAPTCHA luôn hiển thị
Được đề xuất bởi Cloudflare? Có (mặc định cho quy tắc mới) Không (được duy trì để tương thích ngược)
Rào cản của người dùng Thấp (hầu hết vượt qua mà không nhìn thấy gì) Cao (luôn yêu cầu tương tác)
Trạng thái HTTP 503 403
Phương pháp CaptchaAI turnstile hoặc cloudflare_challenge turnstile

Thử thách được quản lý (hiện đại)

Thử thách được quản lý là hành động thử thách được Cloudflare đề xuất. Nó sử dụng một khung quyết định để đưa ra thách thức ít gây gián đoạn nhất có thể:

Luồng quyết định

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
    ↓
<staging-session-cookie> cookie issued

Du khách trải nghiệm gì

Loại khách Những gì họ nhìn thấy Tỷ lệ phần trăm
Trình duyệt thông thường, IP tốt Không có gì (vượt qua vô hình) ~90%
Trình duyệt mới, IP trung lập Máy quay ngắn ~5%
Tín hiệu đáng ngờ Hộp kiểm cửa quay ~4%
Tín hiệu rủi ro cao Trang "Đang kiểm tra trình duyệt của bạn..." ~1%

đầu ra HTML

Các trang Thử thách được quản lý sử dụng nền tảng thử thách của 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>

Thử thách tương tác (cũ)

Thử thách tương tác luôn hiển thị CAPTCHA hiển thị mà khách truy cập phải tương tác. Không có đường chuyền vô hình - mọi du khách đều nhìn thấy và phải hoàn thành thử thách.

Nó hoạt động như thế nào

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

Du khách trải nghiệm gì

Mọi khách truy cập đều thấy một thử thách toàn trang với tiện ích giống như Turnstile:

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

Tại sao Cloudflare không khuyến khích nó

vấn đề tác động
Luôn luôn hiển thị 100% du khách xem thử thách
Ma sát cao hơn Mỗi du khách phải tương tác
Tỷ lệ thoát cao hơn Người dùng rời đi thay vì hoàn thành
Không thích ứng với rủi ro Những du khách nổi tiếng cũng bị thử thách
Những lo ngại về khả năng tiếp cận Mỗi khách truy cập phải hoàn thành tương tác

Phát hiện: Tôi đang đối mặt với thách thức nào?

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

Bảng phát hiện

tín hiệu Thử thách được quản lý Thử thách tương tác IUAM Khối WAF
Trạng thái HTTP 503 403 503 403
challenge-platform trong HTML
Đường dẫn managed trong tập lệnh
jschl trong HTML
Luôn hiển thị tiện ích
Có thể vượt qua vô hình

Giải quyết từng loại thử thách

Giải quyết thách thức được quản lý

Thử thách được quản lý thường hiển thị dưới dạng tiện ích Cloudflare Turnstile. Sử dụng phương pháp turnstile của 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")

Giải quyết thách thức tương tác

Thử thách tương tác luôn hiển thị một tiện ích hiển thị. Sử dụng cùng một phương pháp turnstile:

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 (cả hai loại)

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

Di chuyển từ tương tác sang được quản lý

Cloudflare khuyên bạn nên chuyển từ Thử thách tương tác sang Thử thách được quản lý. Nếu một trang web bạn đang tự động chuyển đổi:

Thay đổi Hiệu ứng tự động hóa
→ tương tác được quản lý Có thể bắt đầu trôi qua một cách vô hình (~90% cơ hội)
HTTP 403 → 503 Cập nhật kiểm tra mã trạng thái
Luôn hiển thị thích ứng → Tiện ích có thể không có trong HTML
Cùng một khóa trang web Mã giải CaptchaAI vẫn giữ nguyên
Đầu ra tương tự Việc xử lý cookie vẫn giữ nguyên

Quy trình phát hiện nhanh

  • Kiểm tra xem trang có hiển thị trang thử thách xen kẽ hay nhúng tiện ích bên trong luồng ứng dụng hay không.
  • Tìm kiếm các điểm đánh dấu cf-chl, vùng chứa Turnstile và móc gọi lại trước khi quyết định đường dẫn xử lý.
  • Ghi lại kết quả phát hiện bằng URL trang và nhận dạng proxy để các thay đổi mục tiêu định kỳ được hiển thị nhanh chóng.

Khắc phục sự cố

Triệu chứng nguyên nhân sửa chữa
503 không có tiện ích hiển thị Thử thách được quản lý đã được vượt qua một cách vô hình Không cần thực hiện hành động nào - bạn đã vượt qua
503 với "Đang kiểm tra trình duyệt của bạn" Được quản lý nâng lên thành thách thức JS Sử dụng phương pháp cloudflare_challenge
403 với CAPTCHA hiển thị Thử thách tương tác (cũ) Sử dụng phương pháp turnstile
403 không có thử thách Khối WAF, không phải là một thách thức Thay đổi IP hoặc mẫu yêu cầu
Loại thử thách thay đổi ngẫu nhiên Thử thách được quản lý thích ứng với tín hiệu Xử lý cả thử thách Turnstile và JS
từ một loại bị từ chối đối với loại khác Các luồng thử thách khác nhau, cùng một miền Giải quyết bất kỳ thử thách nào được đưa ra

Câu hỏi thường gặp

Tôi có nên luôn thử Thử thách được quản lý trước không?

Vâng. Hiện nay hầu hết các trang web đều sử dụng Thử thách được quản lý. Bắt đầu với phương pháp turnstile và quay lại cloudflare_challenge nếu trang hiển thị thử thách JavaScript (503 với "Đang kiểm tra trình duyệt của bạn").

Một trang web có thể sử dụng cả hai loại trên các trang khác nhau không?

Có, nhưng nó không phổ biến. Mỗi quy tắc WAF có thể có một hành động khác nhau. Một quy tắc có thể sử dụng Thử thách được quản lý cho /login và Thử thách tương tác cho /api/.

Vâng. Cả hai loại thử thách đều tạo ra cùng một cookie <staging-session-cookie>. Việc xử lý cookie giống hệt nhau bất kể loại thử thách.

Điều gì sẽ xảy ra nếu Managed Challenge vượt qua tôi một cách vô hình?

Nếu Managed Challenge quyết định yêu cầu của bạn có mức độ rủi ro thấp thì nó sẽ chuyển yêu cầu đó mà không có thách thức rõ ràng. Phản hồi của bạn sẽ là 200 bình thường với nội dung trang. Không cần giải CaptchaAI trong trường hợp này.

Thử thách tương tác có bị ngừng sử dụng không?

Cloudflare chưa chính thức ngừng sử dụng tính năng này nhưng họ đề xuất Thử thách được quản lý cho tất cả các quy tắc mới. Thử thách tương tác vẫn đảm bảo khả năng tương thích ngược. Các trang web có thể di chuyển bất cứ lúc nào.


Tóm tắt

Thử thách được quản lý của Cloudflare chọn một cách thích ứng độ khó thử thách cho mỗi khách truy cập (ẩn đối với thử thách JS đầy đủ), trong khi Thử thách tương tác luôn đưa ra CAPTCHA hiển thị. Cả hai đều tạo ra cùng một cookie <staging-session-cookie> và được giải quyết bằngCaptchaAI— sử dụng turnstile cho hầu hết các thử thách và cloudflare_challenge cho các trang thử thách JavaScript. Thử thách được quản lý là mặc định hiện đại; Thử thách tương tác là di sản.

bài viết liên quan

Os comentários estão desativados para este artigo.