المقارنات

فحص تكامل متصفح Cloudflare مقابل تحدي CAPTCHA

تقدم Cloudflare دفاعين متميزين غالبًا ما يدمجهما المطورون: التحقق من تكامل المتصفح (BIC) وتحديات CAPTCHA. BIC عبارة عن فحص سلبي على مستوى الرأس يحظر بشكل واضح حركة المرور خارج المتصفح دون أي تحدي - فهو ببساطة يُرجع 403. تمثل تحديات CAPTCHA (Turnstile، وتحديات JavaScript، والتحديات المُدارة) مهمة قابلة للحل يمكن للمتصفحات الشرعية اجتيازها. التمييز مهم لأن كل منهما يتطلب استراتيجية معالجة مختلفة.


كيف يقارنون

ميزة التحقق من سلامة المتصفح تحدي الكابتشا
ما يتحقق رؤوس HTTP فقط سلوك المتصفح + البيئة
مطلوب JavaScript؟ لا (على مستوى الرأس) نعم
** يرى المستخدم ** لا شيء (نجاح) أو 403 (فشل) أداة التحدي أو صفحة JS
حالة HTTP عند الفشل 403 503
قابل للحل؟ لا — قم بإصلاح الرؤوس أو حظرها نعم - حل اختبار CAPTCHA
تم إصدار ملف تعريف الارتباط لا cf_clearance
CaptchaAI مطلوب؟ لا — إصلاح رؤوس الطلب نعم
** تمكين الافتراضي ** نعم (جميع خطط Cloudflare) لا (يتم تكوينه لكل قاعدة)
** ينطبق على ** كل طلب مطابقة قواعد WAF فقط

التحقق من سلامة المتصفح (BIC)

تقوم BIC بتقييم رؤوس طلبات HTTP لاكتشاف حركة المرور غير المتعلقة بالمتصفح بشكل واضح. يتم تشغيله قبل أي تحدي JavaScript أو CAPTCHA.

ما يتحقق BIC

تحقق ما الذي يبحث عنه الإخفاقات الشائعة
** التحقق من صحة وكيل المستخدم ** UA مفقود أو فارغ أو معروف أنه سيئ python-requests/2.31، حليقة، wget
** ترتيب الرأس ** الرؤوس بترتيب غير عادي مكتبات HTTP غير المتصفح
رؤوس المتصفح مفقودة Accept، Accept-Language، Accept-Encoding مفقودة الحد الأدنى من عملاء HTTP
توقيعات الروبوت المعروفة مرسلي البريد العشوائي، UAs الماسح الضوئي Googlebot من عناوين IP غير التابعة لـ Google
إساءة استخدام القوائم السوداء لعناوين IP عناوين IP الضارة المعروفة عناوين IP لمراكز البيانات في قوائم الحظر

تدفق بيك

Request hits Cloudflare edge
    ↓
BIC evaluates HTTP headers:
  ├─ User-Agent present and valid?
  ├─ Required headers (Accept, Accept-Language) present?
  ├─ Header order consistent with browser?
  └─ IP not on abuse list?
    ↓
Pass → Request forwarded to origin
    OR
Fail → 403 Forbidden (no challenge offered)

اجتياز BIC

يتم حل BIC عن طريق إرسال رؤوس مناسبة تشبه المتصفح. ليست هناك حاجة إلى حل CAPTCHA:

import requests

# ❌ FAILS BIC — minimal headers
response = requests.get("https://cloudflare-protected.com")
# User-Agent: python-requests/2.31.0
# Result: 403 Forbidden

# ✅ PASSES BIC — browser-like headers
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                  "AppleWebKit/537.36 (KHTML, like Gecko) "
                  "Chrome/120.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,"
              "image/avif,image/webp,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept-Encoding": "gzip, deflate, br",
    "Connection": "keep-alive",
    "Upgrade-Insecure-Requests": "1",
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "none",
    "Sec-Fetch-User": "?1",
}

response = requests.get("https://cloudflare-protected.com", headers=headers)
# Result: 200 OK (passed BIC)

Node.js

const axios = require("axios");

// Browser-like headers to pass BIC
const headers = {
  "User-Agent":
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0",
  Accept:
    "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,*/*;q=0.8",
  "Accept-Language": "en-US,en;q=0.9",
  "Accept-Encoding": "gzip, deflate, br",
  Connection: "keep-alive",
  "Upgrade-Insecure-Requests": "1",
  "Sec-Fetch-Dest": "document",
  "Sec-Fetch-Mode": "navigate",
  "Sec-Fetch-Site": "none",
  "Sec-Fetch-User": "?1",
};

async function fetchWithBIC(url) {
  const response = await axios.get(url, { headers });
  console.log(`Status: ${response.status}`);
  return response.data;
}

تحديات كابتشا

يتم تشغيل تحديات CAPTCHA بعد اجتياز BIC. إنها تتطلب تنفيذ JavaScript وتمثل تحديًا قابلاً للحل:

أنواع تحديات Cloudflare CAPTCHA

نوع التحدي المحفّز مرئية للمستخدم؟ طريقة CaptchaAI
** عنصر Turnstile ** جزءا لا يتجزأ من الصفحة من قبل المطور القطعة على النموذج turnstile
** تحدي الإدارة ** مباراة قاعدة WAF التكيف (غير مرئية/checkbox) turnstile
** تحدي JavaScript ** قاعدة IUAM أو WAF صفحة "التحقق من المتصفح الخاص بك". cloudflare_challenge
التحدي التفاعلي الشك العالي تحدي الصفحة الكاملة cloudflare_challenge

تدفق التحدي (يختلف عن BIC)

Request passes BIC check
    ↓
WAF rules evaluate bot score, IP, path
    ↓
Rule triggers CAPTCHA challenge (HTTP 503)
    ↓
Browser executes JavaScript challenge
    ↓
Challenge solved → cf_clearance cookie issued
    ↓
Subsequent requests pass with cookie

تمييز كتل BIC عن تحديات CAPTCHA

عندما يتم حظر طلبك، فإن تحديد النوع يحدد الإصلاح:

import requests

def diagnose_cloudflare_block(url):
    """Determine if block is BIC or CAPTCHA."""
    # Intentionally use minimal headers to trigger BIC
    minimal_response = requests.get(url, timeout=15, allow_redirects=False)

    # Use browser headers to bypass BIC
    browser_headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                      "AppleWebKit/537.36 Chrome/120.0.0.0",
        "Accept": "text/html,application/xhtml+xml,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.9",
        "Accept-Encoding": "gzip, deflate, br",
    }
    browser_response = requests.get(
        url, headers=browser_headers, timeout=15, allow_redirects=False
    )

    result = {
        "minimal_headers_status": minimal_response.status_code,
        "browser_headers_status": browser_response.status_code,
    }

    if minimal_response.status_code == 403 and browser_response.status_code == 200:
        result["diagnosis"] = "BIC only — fix headers to pass"
        result["fix"] = "Add browser-like headers"

    elif minimal_response.status_code == 403 and browser_response.status_code == 403:
        result["diagnosis"] = "IP or WAF block — not just BIC"
        result["fix"] = "Change IP or check WAF rules"

    elif browser_response.status_code == 503:
        html = browser_response.text
        if "jschl" in html:
            result["diagnosis"] = "IUAM JavaScript challenge"
            result["fix"] = "Use CaptchaAI cloudflare_challenge method"
        elif "cf-turnstile" in html or "challenge-platform" in html:
            result["diagnosis"] = "Managed/Turnstile challenge"
            result["fix"] = "Use CaptchaAI turnstile method"
        else:
            result["diagnosis"] = "Unknown Cloudflare challenge"
            result["fix"] = "Inspect page source for challenge type"

    elif browser_response.status_code == 200:
        html = browser_response.text
        if "cf-turnstile" in html:
            result["diagnosis"] = "Page loads but has Turnstile widget"
            result["fix"] = "Use CaptchaAI turnstile method for form submission"
        else:
            result["diagnosis"] = "No challenge — page accessible"
            result["fix"] = "None needed"

    return result


# Usage
diagnosis = diagnose_cloudflare_block("https://example-cf-site.com")
print(f"Diagnosis: {diagnosis['diagnosis']}")
print(f"Fix: {diagnosis['fix']}")

السيناريوهات الشائعة

السيناريو 1: كتلة BIC فقط

Request with python-requests UA → 403
Request with Chrome UA → 200 ✓

Fix: Add proper browser headers. No CaptchaAI needed.

السيناريو 2: تمرير BIC، ثم اختبار CAPTCHA

Request with Chrome UA → 503 (challenge page)

Fix: Headers are fine. Use CaptchaAI to solve the challenge.

السيناريو 3: BIC + CAPTCHA معًا

Request with python-requests UA → 403 (BIC block)
Request with Chrome UA → 503 (CAPTCHA challenge)

Fix: First fix headers, then solve CAPTCHA with CaptchaAI.

السيناريو 4: لا - حظر IP

Request with python-requests UA → 403
Request with Chrome UA → 403

Fix: Neither BIC nor solvable challenge. IP is blocked.
Try different IP/proxy.

أفضل ممارسات الرأس

الرؤوس الأساسية لتمرير BIC

CLOUDFLARE_SAFE_HEADERS = {
    # Mandatory
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                  "AppleWebKit/537.36 (KHTML, like Gecko) "
                  "Chrome/120.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept-Encoding": "gzip, deflate, br",

    # Strongly recommended
    "Connection": "keep-alive",
    "Upgrade-Insecure-Requests": "1",

    # Sec-Fetch headers (modern Chrome)
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "none",
    "Sec-Fetch-User": "?1",

    # Recommended for consistency
    "Sec-Ch-Ua": '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"',
    "Sec-Ch-Ua-Mobile": "?0",
    "Sec-Ch-Ua-Platform": '"Windows"',
}

الرؤوس التي تؤدي إلى حظر BIC

رأس لماذا يفشل
User-Agent: python-requests/2.31.0 معرف مكتبة HTTP المعروفة
User-Agent: curl/7.81.0 معرف أداة CLI
رأس Accept مفقود لا يوجد متصفح يحذف قبول
Accept-Language مفقود جميع المتصفحات ترسل هذا
User-Agent: "" (فارغ) غير صالح - أتمتة واضحة
User-Agent: Googlebot/2.1 من عنوان IP غير تابع لـ Google هوية بوت وهمية

استكشاف الأخطاء وإصلاحها

أعراض السبب إصلاح
403 مع الحد الأدنى من الرؤوس، و200 مع رؤوس المتصفح بيك فقط استخدم رؤوسًا تشبه المتصفح
403 مع كافة مجموعات الرؤوس تم حظر IP أو قاعدة WAF جرب عنوان IP أو وكيلًا مختلفًا
503 مع صفحة التحدي تحدي CAPTCHA (وليس BIC) استخدم CaptchaAI
403 بشكل متقطع تحديد المعدل أو على أساس الجلسة انخفاض معدل الطلب، والحفاظ على الجلسة
الرؤوس صحيحة ولكن لا تزال 403 فحص بصمة TLS (JA3) استخدم curl_cffi أو المتصفح الحقيقي

الأسئلة المتداولة

هل يمكنني تعطيل BIC لموقعي؟

نعم. يمكن لمشغلي الموقع تعطيل BIC في لوحة تحكم Cloudflare ضمن الأمان > الإعدادات. يتم تمكينه افتراضيًا في جميع الخطط.

هل تقوم BIC بفحص بصمات TLS؟

ليس مباشرة. يركز BIC على رؤوس HTTP. ومع ذلك، فإن إدارة الروبوتات الأوسع (للمؤسسة) في Cloudflare تقوم بفحص بصمات JA3/JA4 TLS بشكل منفصل عن BIC.

إذا اجتزت BIC، هل سأستمر في الحصول على اختبارات CAPTCHA؟

نعم. تعد تحديات BIC وCAPTCHA بمثابة طبقات مستقلة. إن اجتياز BIC يعني أن رؤوسك تبدو مشروعة. لا يزال بإمكانك تشغيل اختبار CAPTCHA من قواعد WAF أو تسجيل الروبوتات أو وضع IUAM.

هل يساعد CaptchaAI مع BIC؟

لا — لا تمثل BIC تحديًا قابلاً للحل. قم بإصلاح رؤوس HTTP الخاصة بك لتمرير BIC. يتعامل CaptchaAI مع تحديات CAPTCHA (Turnstile، وتحديات JavaScript، والتحديات المُدارة) التي تظهر بعد مرور BIC.

كيف تؤثر رؤوس Sec-Fetch على BIC؟

يرسل Chrome الحديث رؤوس Sec-Fetch-* تلقائيًا. لا يؤدي غيابها دائمًا إلى تشغيل BIC، ولكن تضمينها يجعل ملف تعريف الطلب الخاص بك أكثر اتساقًا مع المتصفح الحقيقي.


ملخص

يقوم فحص تكامل المتصفح في Cloudflare بحظر الطلبات التي تحتوي على رؤوس غير مستعرضة بشكل واضح (403)، بينما تقدم تحديات CAPTCHA مهام قابلة للحل (503). تم إصلاح BIC باستخدام رؤوس مناسبة تشبه المتصفح - لاCaptchaAIضروري. تتطلب تحديات CAPTCHA استخدام Turnstile أو Cloudflare Challenge الخاص بـ CaptchaAI. قم دائمًا بتشخيص نوع الكتلة أولاً: قم بإصلاح رؤوس BIC، واستخدم CaptchaAI لاختبارات CAPTCHA، وقم بتغيير عناوين IP للكتل الصلبة.

مقالات ذات صلة

أدلة ذات صلة

التعليقات غير مفعّلة لهذا المقال.