Phân Tích Kỹ Thuật

Hướng dẫn sử dụng cookie Cloudflare Challenge <staging-session-cookie>

Khi Cloudflare gắn cờ một khách truy cập là đáng ngờ, nó sẽ phục vụ một trang thử thách xen kẽ. Sau khi giải quyết xong, trình duyệt sẽ nhận được cookie <staging-session-cookie> cấp quyền truy cập cho phiên. Hướng dẫn này giải thích cách hoạt động của luồng thử thách và cách CaptchaAI xử lý nó.


Cách các trang Cloudflare Challenge hoạt động

  1. Người dùng yêu cầu trang được bảo vệ bởi Cloudflare
  2. Cloudflare đánh giá các tín hiệu rủi ro (danh tiếng IP, tiêu đề, dấu vân tay TLS)
  3. Nếu bị gắn cờ, Cloudflare sẽ trả về 403 hoặc 503 với trang thử thách JavaScript
  4. Trang thử thách chạy kiểm tra trình duyệt và có thể hiển thị tiện ích Turnstile
  5. Khi thành công, Cloudflare đặt <staging-session-cookie> và chuyển hướng đến URL gốc
  6. Các yêu cầu tiếp theo với cookie được chuyển tiếp mà không gặp thách thức nào

Tài sản Chi tiết
Tên <staging-session-cookie>
Tên miền Tên miền trang web mục tiêu (ví dụ: .example.com)
Đường dẫn /
Trọn đời Thông thường từ 30 phút đến 24 giờ
Chỉ http
An toàn Có (chỉ HTTPS)
Cùng trang web không có

Cookie được gắn với một số yếu tố:

  • Địa chỉ IP — Việc sử dụng cookie từ một IP khác thường không thành công
  • User-Agent — Phải khớp với UA được sử dụng trong quá trình giải quyết thử thách
  • Dấu vân tay TLS — Một số cấu hình liên kết với TLS ClientHello

Các loại thử thách

Cloudflare phục vụ các cấp độ thử thách khác nhau:

Thử thách Mã phản hồi Tương tác người dùng Mô tả
Thử thách JS 503 không có Chỉ thực thi JavaScript
Thử thách được quản lý 403 Có lẽ Cloudflare quyết định - có thể hiển thị Turnstile hoặc vượt qua một cách im lặng
Thử thách tương tác 403 Luôn hiển thị tiện ích Turnstile

CaptchaAI giải quyết cả ba loại thông qua bộ giải Cloudflare Challenge.


Giải quyết bằng CaptchaAI

Python

import requests
import time

API_KEY = "YOUR_API_KEY"
TARGET_URL = "https://example.com/protected-page"

# Submit Cloudflare Challenge task
resp = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "turnstile",
    "sitekey": "0x0000000000000000000000",  # may be generic for CF challenge
    "pageurl": TARGET_URL,
    "json": "1",
}).json()

if resp["status"] != 1:
    raise Exception(f"Submit error: {resp['request']}")

task_id = resp["request"]
print(f"Task ID: {task_id}")

# Poll for result
for _ in range(30):
    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["status"] == 1:
        token = result["request"]
        print(f"Token received: {token[:50]}...")
        break
    if result["request"] != "CAPCHA_NOT_READY":
        raise Exception(f"Error: {result['request']}")

JavaScript

const axios = require('axios');

const API_KEY = 'YOUR_API_KEY';
const TARGET_URL = 'https://example.com/protected-page';

const submit = await axios.post('https://ocr.captchaai.com/in.php', null, {
  params: {
    key: API_KEY,
    method: 'turnstile',
    sitekey: '0x0000000000000000000000',
    pageurl: TARGET_URL,
    json: 1,
  }
});
const taskId = submit.data.request;

// Poll
let token = null;
for (let i = 0; i < 30; i++) {
  await new Promise(r => setTimeout(r, 5000));
  const poll = await axios.get('https://ocr.captchaai.com/res.php', {
    params: { key: API_KEY, action: 'get', id: taskId, json: 1 }
  });
  if (poll.data.status === 1) {
    token = poll.data.request;
    break;
  }
}
console.log(`Token: ${token.substring(0, 50)}...`);

Sử dụng mã thông báo đã giải quyết

Sau khi giải xong, hãy đưa mã thông báo vào trang thử thách để nhận <staging-session-cookie>:

# With Selenium
from selenium import webdriver

driver = webdriver.Chrome()
driver.get(TARGET_URL)  # Load the challenge page

# Inject token into Turnstile response field
driver.execute_script("""
    const input = document.querySelector('input[name="cf-turnstile-response"]');
    if (input) input.value = arguments[0];

    // Trigger form submit or callback
    const form = document.querySelector('form');
    if (form) form.submit();
""", token)

# Wait for redirect and extract cookies
import time
time.sleep(3)
cookies = driver.get_cookies()
<staging-session-cookie> = next(
    (c for c in cookies if c['name'] == '<staging-session-cookie>'), None
)
if <staging-session-cookie>:
    print(f"<staging-session-cookie>: {<staging-session-cookie>['value'][:30]}...")
session = requests.Session()
session.cookies.set("<staging-session-cookie>", <staging-session-cookie>["value"], domain=".example.com")
session.headers.update({
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
})

# Now access protected pages
resp = session.get("https://example.com/api/data")
print(resp.status_code)  # 200

Cookie <staging-session-cookie> hết hạn. Phương án giải quyết lại:

import datetime

def is_cookie_valid(cookie):
    if not cookie:
        return False
    expiry = cookie.get("expiry", 0)
    return datetime.datetime.now().timestamp() < expiry - 60  # 60s buffer

def get_or_refresh_clearance(driver, target_url, solve_func):
    cookies = driver.get_cookies()
    cf = next((c for c in cookies if c["name"] == "<staging-session-cookie>"), None)
    if is_cookie_valid(cf):
        return cf["value"]

    # Re-solve
    token = solve_func(target_url)
    # ... inject and extract new cookie

Khắc phục sự cố

Vấn đề Nguyên nhân Cách xử lý
Cookie bị từ chối sau khi giải quyết IP không khớp Sử dụng cùng một proxy để giải quyết và yêu cầu
Cookie hết hạn nhanh chóng TTL ngắn được đặt theo trang web Giải quyết lại trước khi hết hạn; kiểm tra trường expiry
403 mặc dù cookie hợp lệ Tác nhân người dùng không khớp So khớp UA giữa các phiên giải quyết và yêu cầu
Trang thử thách không tải Đã tắt JavaScript Sử dụng trình duyệt đầy đủ (Selenium, Puppeteer)

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

Tôi có thể chia sẻ giữa các máy khác nhau không?

Chỉ khi họ có chung IP và bạn khớp chuỗi Tác nhân người dùng. Cloudflare thường liên kết cookie với IP gốc.

kéo dài bao lâu?

Thông thường từ 30 phút đến 24 giờ, tùy thuộc vào cấu hình Cloudflare của chủ sở hữu trang web.


Giải quyết các trang Cloudflare Challenge với CaptchaAI

Nhận khóa API của bạn tạicaptchaai.com.


Hướng dẫn liên quan

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