
في هذا المقال، نستعرض ظاهرة حظر Cloudflare لطلبات واجهة برمجة التطبيقات (API) المباشرة التي تُرسل من خلال أدوات برمجية مثل `curl` أو مكتبات `requests` في Python، بينما لا يتم حظر نفس الطلبات عند إجرائها عبر متصفحات الويب مثل Google Chrome. سنقدم شروحات هندسية عملية وحلولًا دقيقة لهذه المشكلة الشائعة.
فهم آليات حظر Cloudflare
تستخدم Cloudflare مجموعة معقدة من الآليات للكشف عن الروبوتات والتهديدات المحتملة. المتصفحات الحديثة مثل Chrome تتصرف بطريقة "بشرية" متوقعة، بينما الطلبات المباشرة من الأدوات البرمجية غالبًا ما تفتقر إلى هذه الخصائص، مما يثير شكوك أنظمة Cloudflare الأمنية.
بصمات المتصفح ورؤوس الطلبات
Cloudflare تفحص بدقة رؤوس HTTP المرسلة مع كل طلب. المتصفحات ترسل مجموعة غنية من الرؤوس، مثل User-Agent، Accept، Accept-Language، Accept-Encoding، Referer، و Origin. بالإضافة إلى ذلك، يتم تحليل ترتيب هذه الرؤوس وقيمها المحددة. الطلبات المباشرة من السكربتات غالبًا ما تكون مبسطة، أو تستخدم قيمًا افتراضية، أو تفتقر إلى التناسق الذي تتوقعه Cloudflare من متصفح حقيقي.
تحديات JavaScript وملفات تعريف الارتباط
العديد من آليات Cloudflare الأمنية تعتمد على تنفيذ JavaScript في المتصفح لجمع معلومات إضافية حول العميل أو لحل تحديات CAPTCHA. الطلبات المباشرة لا تنفذ JavaScript ولا تتعامل مع ملفات تعريف الارتباط (Cookies) التي قد تكون ضرورية للمصادقة أو لتجاوز التحقق الأولي من Cloudflare.
تشخيص سبب الحظر
تحديد السبب الدقيق للحظر هو الخطوة الأولى نحو تطبيق الحل الصحيح. يتطلب ذلك مقارنة دقيقة بين سلوك المتصفح وسلوك السكربت.
تحليل رؤوس HTTP
قارن رؤوس الطلب بين طلب ناجح من Chrome وطلب فاشل من الـ API. استخدم أدوات المطور (Developer Tools) في Chrome (علامة تبويب Network) أو أدوات اعتراض حركة المرور مثل Wireshark. ابحث عن الاختلافات في الرؤوس المذكورة أعلاه. غالبًا ما يكون User-Agent هو السبب الأكثر شيوعًا، يليه Accept ورؤوس أخرى.
curl -v \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36" \
-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" \
-H "Accept-Language: en-US,en;q=0.9" \
-H "Accept-Encoding: gzip, deflate, br" \
-H "Referer: https://example.com/" \
-H "Origin: https://example.com" \
"https://api.example.com/data"
فحص سلوك المتصفح
راقب تدفق الشبكة في Chrome Developer Tools. هل هناك عمليات إعادة توجيه (redirects) قبل الوصول إلى الـ API الفعلي؟ هل يتم تعيين ملفات تعريف ارتباط جديدة؟ هل يتم تنفيذ JavaScript معقد قبل إرسال طلب الـ API؟ قد تشير هذه السلوكيات إلى تحديات أمنية تقوم Cloudflare بفرضها.
سجلات Cloudflare
إذا كان لديك وصول إلى لوحة تحكم Cloudflare الخاصة بالموقع المستهدف، تحقق من سجلات Firewall Events أو Analytics. قد توضح هذه السجلات قاعدة الحظر المحددة التي تم تفعيلها (مثل Bot Fight Mode، Rate Limiting، Managed Rules)، مما يوفر معلومات قيمة حول سبب الحظر.
حلول هندسية عملية
تتطلب معالجة حظر Cloudflare نهجًا متعدد الأوجه، يعتمد على مستوى التحكم الذي لديك في إعدادات Cloudflare والتعقيد المطلوب.
محاكاة رؤوس المتصفح
الخطوة الأولى والأكثر شيوعًا هي محاكاة رؤوس HTTP الخاصة بالمتصفح بدقة قدر الإمكان. قم بنسخ جميع الرؤوس ذات الصلة من طلب متصفح ناجح.
- User-Agent: استخدم أحدث `User-Agent` من متصفح حقيقي.
- Accept, Accept-Language, Accept-Encoding: انسخ هذه الرؤوس كما هي.
- Referer, Origin: اضبطها لتعكس المصدر المتوقع للطلب.
- Cookies: إذا كانت هناك ملفات تعريف ارتباط ضرورية، قم بإدارتها يدويًا أو باستخدام مكتبات تدعم الجلسات.
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Accept-Language': 'en-US,en;q=0.9',
'Accept-Encoding': 'gzip, deflate, br',
'Referer': 'https://example.com/',
'Origin': 'https://example.com/'
}
response = requests.get('https://api.example.com/data', headers=headers)
print(response.status_code)
استخدام المتصفحات بلا رأس (Headless Browsers)
لتجاوز تحديات JavaScript وملفات تعريف الارتباط المعقدة، استخدم متصفحات بلا رأس مثل Puppeteer (Node.js) أو Selenium (Python). هذه الأدوات تحاكي متصفحًا حقيقيًا بالكامل، بما في ذلك تنفيذ JavaScript، إدارة ملفات تعريف الارتباط، وحتى حل تحديات CAPTCHA إذا تم تكوينها بشكل صحيح.
رموز API لـ Cloudflare وقوائم IP البيضاء
إذا كنت المالك أو لديك إذن بالوصول إلى إعدادات Cloudflare للموقع المستهدف، فإن الحل الأمثل هو استخدام رموز API أو إضافة عناوين IP الخاصة بخادمك إلى القائمة البيضاء (Whitelist) في قواعد جدار الحماية (Firewall Rules) لـ Cloudflare. هذا يضمن أن طلباتك المباشرة لن يتم حظرها، ويعد النهج الأكثر أمانًا وفعالية.
إدارة معدل الطلبات (Rate Limiting)
قد يكون الحظر ناتجًا عن تجاوز حدود معدل الطلبات التي تفرضها Cloudflare. قم بتطبيق تأخيرات (delays) بين الطلبات أو استخدم خوارزميات التراجع الأسي (exponential backoff) لتقليل وتيرة الطلبات، خاصة عند التعامل مع أخطاء HTTP 429 Too Many Requests.
هل يمكن لـ Cloudflare التمييز بين طلب API من Python وطلب من متصفح حقيقي؟
نعم، Cloudflare تستخدم تقنيات متقدمة مثل تحليل رؤوس HTTP، بصمات المتصفح، وتنفيذ JavaScript للتمييز بين الطلبات الشرعية من المتصفحات وتلك الآلية أو التي تأتي من سكربتات.
ما هو أفضل نهج لتجنب الحظر عند استخدام API خلف Cloudflare؟
النهج الأفضل يعتمد على السيناريو. إذا كان لديك تحكم في إعدادات Cloudflare، استخدم رموز API أو قوائم IP البيضاء. إذا لم يكن كذلك، فحاول محاكاة سلوك المتصفح بدقة قدر الإمكان، أو استخدم متصفحًا بلا رأس (headless browser) إذا كانت تحديات JavaScript معقدة.
المشاركات ذات الصلة
المقال الأصلي:
Cloudflare وحظر طلبات الـ API المباشرة: حلول هندسية
المصدر: صوان محور XYZ
شكر خاص لـ GEMINI و جمال الحزازي.