تقدم 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 للكتل الصلبة.
مقالات ذات صلة
- Cloudflare Challenge مقابل اكتشاف Turnstile
- مقارنة Geetest وCloudflare Turnstile
- Cloudflare المُدارة مقابل التحدي التفاعلي