انتقل إلى المحتوى
أمن الشبكات

كيف تكتشف كشط الويب: السجلات واستعلامات IP والنقاط العمياء

كيف تكتشف كشط الويب في سجلات الوصول لديك: استعلامات حقيقية عن CCBot وAhrefsBot وعقدة خروج Tor وخادم سحابي، وتتبّع ادعاء Googlebot واحد، وما يفوت عناوين IP.

بقلمفريق GeoIPHubتاريخ النشرمدة القراءةقراءة في 16 دقيقة
صفوف مجردة من بلاطات البيانات تُرفع بعيدًا، تمثّل كشط الويب

طلب واحد من كاشط ليس سوى GET. له رمز حالة ومسار وUser-Agent، كأي سطر آخر في سجلك. ولا يظهر الكشط إلا عبر مئات الأسطر وعبر شبكة: سكربت Python على خادم سحابي، أو متصفح بلا واجهة يقوده Puppeteer أو Playwright، أو زاحف لتدريب الذكاء الاصطناعي، أو زاحف SEO مثل AhrefsBot، أو واجهة كشط تبيع بروكسيات متدوّرة بالغيغابايت.

مرّرنا سبعة عناوين IP من فئة الكاشطات عبر واجهة GeoIPHub بتاريخ 2026-10-08. أربعة زواحف موثَّقة (Googlebot وCCBot وClaudeBot وAhrefsBot) جاءت جميعها من شبكات استضافة ونالت allow. ونال خادم Linode سحابي عادي درجة 10، وهو أيضًا allow، ونالت عقدة خروج Tor وخادم Mullvad VPN درجة 100 لكل منهما، أي block. يعطيك عنوان IP الشبكة. أما حكم الكشط فيأتي من سجلاتك.

نعرض أدناه كيف تكتشف بوتات الكشط في سجل الوصول، ونتتبّع سطر سجل واحدًا يدّعي أنه Googlebot، ونوضح أين تعمى بيانات IP، ثم نربط ما تجده بالسماح أو تحديد المعدل أو التحدي أو الحجب. وإن أردت الإشارات الخاصة بـ IP واحدة واحدة أولًا، فمحورنا يغطي اكتشاف البوتات عبر IP، إشارةً إشارة؛ وهذا المقال يطبّقها على الكشط.

سجل وصول مجرد على شكل أشرطة ضوئية تنبض بعضها بإيقاع آلي، يمثّل حركة الكاشطات في السجلات
تترك الكاشطات إيقاعًا في سجلات الوصول قبل أن تترك أي شيء آخر.

كيف تكتشف كشط الويب: المعدل والمسار والعميل والشبكة

لاكتشاف كشط الويب، افحص أربع مجموعات من الإشارات: سرعة طلب العميل (المعدل)، وما يطلبه وبأي ترتيب (المسار)، وما يقوله عن نفسه (العميل)، ومن أين يتصل (الشبكة). تُدرج OWASP الكشط تهديدًا آليًّا مستقلًّا هو OAT-011، وتعرّفه بأنه جمع "محتوى التطبيق و/أو بيانات أخرى لاستخدامها في مكان آخر" (OWASP Automated Threats). وهذا التعريف يتعلق بالنية التي لا تستطيع رؤيتها. أما المجموعات الأربع فهي ما تستطيع رؤيته.

  • المعدل. الطلبات في الدقيقة لكل عنوان IP ولكل شبكة. نعني بالشبكة ASN، أو /24 في IPv4 و/64 في IPv6 لتجميع أدق. غالبًا ما تعمل الكاشطات بمعدل ثابت على مدار الساعة؛ أما الناس فيأتون على دفعات وينامون.
  • المسار. روابط القوائم والترقيم تُمشى بالترتيب، وخريطة موقع تُقرأ من أولها إلى آخرها، وصفحات المنتجات أو الأسعار فقط، ولا طلبات CSS أو JavaScript أو صور إطلاقًا.
  • العميل. ادعاء User-Agent، وغياب ترويسة Accept-Language، وعدم الاحتفاظ بملفات تعريف الارتباط بين الطلبات، وعلامات الأتمتة. في المتصفح تكون navigator.webdriver صحيحة حين يعمل Chrome بالخيار --headless أو --enable-automation (MDN)، مع أن الكاشط المصمم يزيلها. وعلى الحافة، كثيرًا ما تكشف بصمة TLS (JA3 أو JA4) مكتبة HTTP خلف User-Agent يدّعي أنه Chrome.
  • الشبكة. ما يعيده استعلام IP: عنوان IP لمركز بيانات (استضافة) تضع عليه الواجهة العلم detection.is_hosting، أو زاحف موثَّق، أو Tor، أو VPN، أو ماسح.

الصعوبة في اكتشاف كشط الويب أن لكل إشارة توأمًا بريئًا. فشبكة CDN تسحب من خادمك الأصلي، ومراقب وقت التشغيل، ومكتب خلف عنوان NAT واحد، وقارئ RSS، كلها تبدو غريبة على محور واحد. وتأتي حجة الكشط من إشارات تتفق معًا.

الإشارةشكل الكاشطالشبيه البريء
المعدل لكل IP أو شبكةطلبات ثابتة كل 1 إلى 2 ثانية لساعاتNAT مكتب، أو CGNAT، أو CDN، أو خدمة مراقبة
ترتيب الصفحاتpage=1, 2, 3 … بالتتابع، أو خريطة الموقع بترتيب الملفشخص يتصفح النتائج صفحة صفحة، لكن بصفحات أقل بكثير
الأصولHTML فقط، دون CSS أو JS أو صورقارئات التغذية، ومعاينات الروابط، ومتصفحات النصوص
عمق الجلسةآلاف الصفحات في جلسة واحدةزحف داخلي لضمان الجودة أو أداة تدقيق SEO خاصة بك
User-Agentاسم زاحف من شبكة لا يستخدمها ذلك الزاحفزاحف حقيقي على نطاق أُضيف خلال الأيام القليلة الماضية
الشبكةمخرج مركز بيانات أو Tor أو VPNشبكات VPN المؤسسية، ووكلاء التسوق بالذكاء الاصطناعي، وأدوات مستضافة سحابيًّا

كيف تعرف إن كان موقعك يتعرض للكشط: اقرأ سجلات الوصول أولًا

لتعرف إن كان موقعك يتعرض للكشط، جمّع سجلات الوصول بحسب الشبكة وابحث عن العملاء الذين يجلبون صفحات كثيرة، ويجلبونها بالترتيب، ولا يحمّلون أبدًا الأصول التي يحمّلها المتصفح. وتصل العلامات الخارجية عادةً أولًا: يظهر نص منتجاتك أو أسعارك على موقع آخر، أو ترتفع كلفة النطاق الترددي والخادم على صفحات القوائم بينما تبقى التحويلات ثابتة. وللتحقق من الخارج، ابحث عن جملة مميزة من صفحتك بين علامتي اقتباس، وراقب ظهور أسعارك مجددًا على مواقع التجميع خلال ساعات من تغييرها. أما السجلات فتخبرك من فعل ذلك.

وهذا ما يبدو عليه الأمر في سجل وصول بصيغة مدمجة. هذه قيم توضيحية وليست حركة حقيقية. العنوان 45.33.32.156 هو مضيف الاختبار العام لـ Nmap على Linode، ولم يرسل هذه الطلبات؛ وهو يقوم مقام "خادم سحابي" لأنه لا يجوز لنا نشر عنوان IP لزائر حقيقي.

GeoIPHub API
# illustrative values, not real traffic 45.33.32.156 - - [08/Oct/2026:03:14:07 +0000] "GET /products?page=34 HTTP/1.1" 200 48211 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" 45.33.32.156 - - [08/Oct/2026:03:14:08 +0000] "GET /products?page=35 HTTP/1.1" 200 47960 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" 45.33.32.156 - - [08/Oct/2026:03:14:10 +0000] "GET /products?page=36 HTTP/1.1" 200 48377 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" 45.33.32.156 - - [08/Oct/2026:03:14:11 +0000] "GET /products?page=37 HTTP/1.1" 200 48102 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" 45.33.32.156 - - [08/Oct/2026:03:14:13 +0000] "GET /products?page=38 HTTP/1.1" 200 47815 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" 45.33.32.156 - - [08/Oct/2026:03:14:14 +0000] "GET /products?page=39 HTTP/1.1" 200 48290 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"

تبرز ثلاثة أشياء. الصفحات تتصاعد واحدة واحدة بفاصل 1 إلى 2 ثانية، عند الثالثة فجرًا. لا يوجد مُحيل ولا طلب .css أو .js واحد بينها. والعميل يسمّي نفسه Googlebot، وهو ما تختبره الأقسام التالية.

لا تحتاج إلى منصة سجلات لإيجاد عملاء كهؤلاء. تعمل هذه الأوامر المختصرة على سجل مدمج قياسي؛ شغّلها أولًا على ساعة مزدحمة واحدة:

GeoIPHub API
# Busiest client IPs awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -20 # Busiest IPv4 /24 networks (rotating scrapers often stay inside one block) awk '{split($1,o,"."); print o[1]"."o[2]"."o[3]".0/24"}' access.log | sort | uniq -c | sort -rn | head -20 # Busiest User-Agents awk -F'"' '{print $6}' access.log | sort | uniq -c | sort -rn | head -20 # Clients with more than 100 page requests and zero asset requests awk '{ if ($7 ~ /\.(css|js|png|jpe?g|webp|svg|woff2?)(\?|$)/) a[$1]++; else p[$1]++ } END { for (ip in p) if (!(ip in a) && p[ip] > 100) print p[ip], ip }' access.log | sort -rn

اعمل على المخرجات بهذه القائمة:

  • الصفحات المطروقة. هل يتركز العملاء المزدحمون على القوائم أو الأسعار أو نتائج البحث أو خريطة الموقع؟
  • المعدل لكل IP، ثم لكل شبكة. بعد إثراء العناوين، اجمع الطلبات لكل ASN؛ فخمسون عنوان استضافة في ASN واحد تمشي الصفحات نفسها هي على الأرجح فاعل واحد.
  • عمق الجلسة. مئات الصفحات في الجلسة دون استخدام سلة أو تسجيل دخول أو مربع بحث.
  • الترتيب. روابط الترقيم أو خريطة الموقع تُجلب بالتتابع.
  • الأصول. HTML فقط، دون CSS أو JavaScript أو خطوط أو صور.
  • ادعاءات الزواحف. كل User-Agent لـ Googlebot أو Bingbot أو GPTBot أو ClaudeBot يُضاف إلى قائمة للتحقق منها عبر IP.
  • علامات الأتمتة. قيم User-Agent لمكتبات (python-requests وcurl وGo-http-client) وتلميحات المتصفحات بلا واجهة.

عناوين IP الكاشطات: ما تعيده استعلامات GeoIPHub الحقيقية

تقع عناوين IP الكاشطات في بضع فئات من الشبكات، ويخبرك الاستعلام بالفئة التي تنظر إليها لا بما إذا كان الطلب من كاشط. في استعلامات GeoIPHub لدينا نالت الزواحف الموثَّقة من 0 إلى 23 (allow)؛ ونالت مخارج Tor وVPN درجة 100 (block). أجرينا استعلامًا مجهولًا واحدًا لكل فئة بتاريخ 2026-10-08، بفارق أربع ثوانٍ:

GeoIPHub API
curl -s https://api.geoiphub.com/v1/lookup/18.97.14.81
IPفئة البوتالشبكة (ASN)الأعلام الرئيسيةfraud_scorerecommended_actiondetection_methods
18.97.14.81زاحف (الفئة: archiver)Amazon AMAZON-AES (AS14618)is_hosting: true, crawler.name: CCBot, verified: true0allowdatacenter_ip, rdns_hosting, verified_crawler
216.73.216.10زاحف (الفئة: ai)Amazon AMAZON-02 (AS16509)is_hosting: true, crawler.name: ClaudeBot, verified: true0allowdatacenter_ip, no_ptr_datacenter, verified_crawler
5.39.1.230زاحف (الفئة: seo)OVH (AS16276)crawler.name: AhrefsBot, verified: true, is_abusive: true23allowabusive_listed, datacenter_blocklisted, no_ptr_datacenter, verified_crawler
192.178.4.40زاحف (الفئة: search_engine)Google (AS15169)crawler.name: Googlebot, verified: true0allowdatacenter_ip, no_ptr_datacenter, verified_crawler
45.33.32.156خادم سحابي عاديAkamai Connected Cloud, Linode (AS63949)is_hosting: true, crawler.name: none10allowdatacenter_ip
185.220.101.47عقدة خروج TorStiftung Erneuerbare Freiheit (AS60729)is_tor: true, is_spammer: true100blocktor_exit, datacenter_blocklisted, rdns_tor, known_spammer
185.213.155.73VPN تجاري31173 Services AB (AS39351)is_vpn: true, vpn_provider: Mullvad, vpn_confidence: 95100blockknown_vpn_server, wireguard_open, datacenter_with_vpn_proxy, no_ptr_datacenter

هذه استعلامات منفردة في يوم واحد وليست اختبار أداء، وتتغير القيم بتغير النطاقات. وثمة فجوة معروفة: no_ptr_datacenter في صفي Googlebot وAhrefsBot مصدره بياناتنا لا بياناتهم. فالواجهة لا تخزّن سجل PTR لبعض نطاقات الزواحف مع أن DNS العكسي يعمل (إذ يُحَلّ 192.178.4.40 إلى crawl-192-178-4-40.googlebot.com). أما بالنسبة إلى عنوان ClaudeBot فالإشارة دقيقة: ليس له DNS عكسي.

وهذه استجابة CCBot، مقتطعة لكن بقيم حقيقية وبالتداخل الأصلي:

GeoIPHub API
{ "ip": "18.97.14.81", "asn": { "asn": 14618, "org": "AMAZON-AES - Amazon.com, Inc.", "asn_type": "hosting" }, "detection": { "is_hosting": true, "is_vpn": false, "is_tor": false }, "threat": { "is_crawler": true, "crawler": { "verified": true, "name": "CCBot", "operator": "CommonCrawl", "category": "archiver", "verification_method": "ip_range_list" } }, "scoring": { "fraud_score": 0, "recommended_action": "allow", "detection_methods": ["datacenter_ip", "rdns_hosting", "verified_crawler"] } }

يعمل زاحف Common Crawl نفسه على AWS، ومع ذلك ينال 0. فالعنوان يقع في 18.97.14.80/29، وهو نطاق تنشره Common Crawl في ملف ccbot.json، وتعديل الزاحف الموثَّق في تسجيلنا (−28.5) يلغي إشارة مركز البيانات. ويتحقق GeoIPHub من 19 مصدرًا رسميًّا لنطاقات الزواحف بهذه الطريقة، منها مصادر Google وBing وOpenAI وAnthropic وCommon Crawl وAhrefs. وسواء أردت أن يقرأ صفحاتك زاحف تغذّي بياناته نماذج الذكاء الاصطناعي، مثل CCBot أو GPTBot، فهذه مسألة سياسة. أما الاستعلام فيحسم هويته فقط.

كان AhrefsBot هو المفاجأة. فقد عاد موثَّقًا (يقع 5.39.1.230 في 5.39.1.224/27 ضمن نطاقات الزواحف المنشورة لدى Ahrefs)، لكنه أيضًا is_abusive: true مع abusive_listed في الطرق، بدرجة 23، وهو لا يزال allow. لم نتتبّع أي قائمة وسمته. والدرس قائم في الحالتين: "موثَّق" يخبرك من هو الزاحف لا ما إذا كنت تريده. فزاحف SEO الذي يرسم خريطة موقعك لتقرير روابط خلفية لمنافس يظل يكشط، لكنه يكشط بإعلان.

انتحال الزواحف في سجلات الكشط: سطر واحد متتبَّع

الطلب الذي يقول Googlebot في User-Agent لكنه يأتي من خادم سحابي ادعاء غير موثَّق. يستطيع GeoIPHub إخبارك بأن العنوان ليس ضمن نطاق Google، لكن المقارنة مع User-Agent تجري في كودك، لأن الاستعلام لا يرى ترويساتك أبدًا. لنأخذ السطر الرابع من السجل التوضيحي: 45.33.32.156 وGET /products?page=37 وUser-Agent بقيمة Googlebot/2.1.

  1. استعلم عن العنوان. أعاد الاستعلام الحقيقي ASN 63949، Akamai Connected Cloud (Linode)، وdetection.is_hosting: true، وthreat.crawler.name: "none"، وverified: false، وfraud_score بقيمة 10، وallow، مع الطرق ["datacenter_ip"].
  2. قارن الادعاء. يفحص كودك رمز User-Agent مقابل threat.crawler.verified وthreat.crawler.name.
  3. قرّر. يقول UA إنه Googlebot؛ والعنوان ليس ضمن أي نطاق لـ Google. وهذا يجعله "غير موثَّق على أنه Googlebot". حدّد معدله أو تحدّاه. التحدي (CAPTCHA أو فحص JavaScript) هو طريقة تنفيذ الإجراء step_up في الواجهة. ولا تسمّه مزيّفًا: فقد يستغرق التحقق من نطاق جديد لدى Google نحو يومين في بياناتنا، لأن ملفات النطاقات تُجلب يوميًّا وقاعدة بيانات الاستعلام تُعاد بناؤها يوميًّا.
  4. تحقق من التباين. أعاد Googlebot الحقيقي عند 192.178.4.40 القيم verified: true وname: "Googlebot" وverification_method: "ip_range_list" والدرجة 0.

توثّق Google طريقتين لإجراء الفحص نفسه بنفسك: DNS عكسي على العنوان يتبعه بحث أمامي عن اسم المضيف، أو مطابقة مع ملفات النطاقات المنشورة مثل common-crawlers.json (Google Search Central). وتبدو المقارنة في الكود هكذا:

GeoIPHub API
// Map User-Agent tokens to the crawler names the API returns. // They don't always match: OpenAI's "ChatGPT-User" comes back as "ChatGPTUser". const CRAWLER_NAMES = { "Googlebot": "Googlebot", "GPTBot": "GPTBot", "CCBot": "CCBot", "ClaudeBot": "ClaudeBot", "AhrefsBot": "AhrefsBot", "ChatGPT-User": "ChatGPTUser", }; async function classifyRequest(ip, userAgent) { const res = await fetch(`https://api.geoiphub.com/v1/lookup/${ip}`, { headers: { "x-api-key": process.env.GEOIPHUB_API_KEY }, }); const { threat, scoring } = await res.json(); const token = Object.keys(CRAWLER_NAMES).find((t) => userAgent.includes(t)); if (token) { const ok = threat.crawler.verified && threat.crawler.name === CRAWLER_NAMES[token]; return ok ? "allow_crawler" : "unverified_crawler_claim"; // rate-limit or challenge } return scoring.recommended_action; // allow, review, step_up or block }

هذه هي الحالة التي تقول فيها الدرجة allow ويقول النمط كاشط. فبالنظر إلى IP وحده، هذا الطلب 10 وallow، لأن الخادم السحابي إشارة ضعيفة بمفردها. ويأتي حكم الكشط من ثلاثة أشياء لا تراها الدرجة: عدم تطابق UA، والمعدل الثابت، والمشي صفحة صفحة. وللاطلاع على الإجراء الكامل لدى Google، راجع كيف تتحقق من Googlebot عبر DNS العكسي وملفات نطاقات Google؛ ولـ GPTBot وClaudeBot والوكلاء الموقِّعين، راجع كيف تتحقق من زواحف الذكاء الاصطناعي عبر IP وDNS العكسي وWeb Bot Auth.

ما تفوّته بيانات IP: البروكسيات السكنية والمتصفحات الحقيقية

تفوّت بيانات IP الكاشطات التي تمرّ عبر بروكسيات سكنية أو بروكسيات الجوال، ولا يكتشف GeoIPHub البروكسي السكني؛ فالحقل is_residential_proxy استنتاج تقريبي قائم على ASN، فاعتبره بلا إشارة. تمرّر شبكة البروكسي السكني كل طلب عبر اتصال منزلي لشخص ما. وعلى طبقة IP يبدو الطلب كتلك الأسرة: مزود إنترنت استهلاكي ومدينة حقيقية ولا علم استضافة ودرجة نظيفة.

ويزيد التدوير الأمر سوءًا. فقد يمنح المجمّع كل طلب عنوان IP منزليًّا جديدًا، فلا ترتفع العدّادات لكل عنوان أبدًا. وتتشارك بروكسيات الجوال عناوين المشغِّلين مع هواتف حقيقية، ويمكن لكاشط IPv6 أن يتنقل عبر /64 كاملة دون أن يلمس شبكة جديدة.

المتصفحات الحقيقية هي النقطة العمياء الثانية. فسكربت Playwright يقود Chrome من اتصال مكتب أو منزل يرسل عنوان IP نفسه ومصافحة TLS نفسها والأصول نفسها كالشخص على المكتب المجاور. وبعض إعدادات المتصفح بلا واجهة تعلن عن نفسها؛ أما المضبوطة جيدًا فلا.

وما يكشف هذه الكاشطات رغم ذلك هو النمط عبر الطلبات:

إعداد الكاشطما يظهره IPما يكشفه رغم ذلك
بروكسيات سكنية متدوّرةمزود إنترنت استهلاكي، ودرجة نظيفةعناوين IP كثيرة تتشارك ترتيب صفحات واحدًا وإيقاع توقيت واحدًا وبصمة واحدة
بروكسيات الجوالعنوان مشغِّل مشترك مع هواتف حقيقيةعمق جلسة وترتيب مسار لا ينتجهما أي مستخدم هاتف
تدوير IPv6 داخل /64عنوان جديد لكل طلبعدّ الطلبات لكل /64 بدلًا من كل عنوان
متصفح بلا واجهة على خط منزلي أو مكتبيشبكة وصول عاديةعلامات الأتمتة، وبصمات TLS، وغياب استمرارية ملفات تعريف الارتباط
أي كاشط يتبع كل رابطأي شبكة يستخدمهاطلبات لرابط مخفي: رابط يُخفى بـ CSS لا يراه أي زائر؛ وكل ما يطلبه يتبع الروابط عمياء

وإن وضعت رابطًا مخفيًّا، فامنع مساره في robots.txt، كي لا تلمسه الزواحف التي تحترم الملف. ويتعمق مقالان في الطبقات التي تقع بجانب IP. اقرأ لماذا تعمل بصمة الجهاز واستخبارات IP على أفضل وجه معًا، وما يستطيع الاستعلام إظهاره وما لا يستطيع في اكتشاف احتيال البروكسي السكني.

الكشط مقابل الزحف مقابل إساءة استخدام الواجهة

الزحف معلَن وقابل للتحقق، والكشط يأخذ محتواك أو بياناتك وغالبًا ما يكون غير معلَن، وإساءة استخدام الواجهة هي نداءات آلية لنقاط نهايتك تتجاوز شروطك أو حدودك. والخط الفاصل بينها هو السلوك والهوية لا التقنية: فقد يشغّل Googlebot وكاشط أسعار مكتبة HTTP نفسها على السحابة نفسها.

نوع الحركةما تستهدفهكيف تعرّف عن نفسهاما الذي تفحصه
الزحفصفحات لفهرس بحث أو أرشيف أو نموذج ذكاء اصطناعيUser-Agent مسمّى ونطاقات IP منشورةالعنوان ضمن نطاق الجهة المشغِّلة؛ والالتزام بـ robots.txt
الكشطمحتوى أو بيانات محددة: أسعار وقوائم ومقالاتغالبًا UA لمتصفح أو اسم زاحف مستعارالمعدل وترتيب الصفحات والأصول المفقودة وUA مقابل الزاحف الموثَّق
إساءة استخدام الواجهةنقاط JSON لديك، وغالبًا خلف الموقعمفتاح واجهة أو رمز جلسة أو لا شيءالنداءات لكل مفتاح ولكل شبكة، ونقاط نهاية خارج تدفقات التطبيق العادية

يمكن لزاحف موثَّق أن يكشط، كما يبيّن AhrefsBot، ويمكن لكاشط أن يبدو كزاحف. ولهذا يبدأ القسم التالي بالسماح للموثَّقين فقط.

كيف تمنع كشط الويب دون حجب زواحف محركات البحث

لمنع كشط الويب دون حجب زواحف محركات البحث، اسمح للزواحف الموثَّقة أولًا، ثم حدّد المعدل بحسب الشبكة وتحدَّ العملاء الذين لا يتصرفون كالمتصفحات، واحجب فقط ما أكّدته. وتعطي نطاقات درجة GeoIPHub جانب IP من ذلك: allow حتى 25، وreview حتى 50، وstep_up حتى 75، وblock فوق 75. والترتيب مهم. فحجب شامل لمراكز البيانات يُشغَّل أولًا كان سيصيب Googlebot وCCBot وClaudeBot وAhrefsBot في جدولنا، إذ جاءت الأربعة من شبكات استضافة.

  1. اسمح للزواحف الموثَّقة حين تكون threat.crawler.verified صحيحة ويطابق crawler.name رمز User-Agent. ثم طبّق سياستك الخاصة لكل زاحف. وبالنسبة إلى زواحف الذكاء الاصطناعي، تبيّن مقارنتنا بين GPTBot وOAI-SearchBot وChatGPT-User كيف تحجب التدريب دون مغادرة بحث الذكاء الاصطناعي.
  2. أعد استخدام قواعد IP. نطاقات الدرجة والتعامل مع Tor وحدود المعدل لكل بادئة تعمل للكاشطات كما تعمل لأي بوت؛ ويغطيها المحور. تعامل مع عنوان IP لمركز بيانات على أنه مُدخل موزون لا سبب للحجب، لأن الاستضافة تشمل أيضًا وكلاء الذكاء الاصطناعي وبروكسيات الشركات وأدواتك الخاصة (راجع ما هو عنوان IP لمركز البيانات).
  3. حدّد المعدل بحسب ASN على الصفحات التي تريدها الكاشطات. يبقى المجمّع الذي يتنقل عبر مزود استضافة واحد تحت أي حد لكل IP، لكن عدّادًا لكل ASN على صفحات القوائم والبحث والأسعار يجمعه. أعطِ السحابات الكبيرة سقفًا أعلى، لأن عملاء كثيرين لا صلة بينهم يتشاركون ASN واحدًا.
  4. حدّد عدد صفحات الترقيم وضع القوائم الكاملة خلف تسجيل دخول. قدّم عددًا ثابتًا من صفحات القوائم للزوار المجهولين. فجدار الحساب يحوّل كل كاشط إلى حسابات تستطيع عدّها وإغلاقها.
  5. ضع حصصًا لكل مفتاح على نقاط JSON التي تستدعيها صفحاتك. غالبًا ما تتجاوز الكاشطات HTML وتستدعي الواجهة التي خلفه، فأصدر مفاتيح أو رموز جلسة وحدّد النداءات لكل مفتاح.
  6. أضف طبقة إدارة بوتات أو WAF لإشارات العميل التي لا تحويها سجلاتك، مثل بصمات TLS وفحوص JavaScript على الحافة.
  7. استخدم قواعد السلوك للحركة السكنية، حيث لا يعطيك IP شيئًا.

تشكّل الاستجابات سلّمًا: السماح، فتحديد المعدل، فالتحدي، فالحجب. وتضيف بعض المواقع tarpit، أي إبطاء الردود لكاشط مشتبه به، أو تقدّم محتوى مضلِّلًا، مثل أسعار معدَّلة، للحركة التي صنّفتها بالفعل. وكلاهما يكلفك شيئًا إن أخطأ التصنيف، فلا تستخدمهما إلا على حركة كنت ستحجبها على أي حال.

الإشارةالإجراء الافتراضي
threat.crawler.verified مع User-Agent مطابقالسماح، ثم تطبيق سياستك لكل زاحف
User-Agent لزاحف، وcrawler.name يساوي "none"تحديد المعدل أو التحدي
ترتيب الصفحات نفسه من 20+ عنوان IP في ASN واحدتحديد معدل ASN، ثم التحدي
HTML فقط، و100+ صفحة، دون CSS أو JSالتحدي، مهما قال IP
طلب لرابط لا يستطيع أي شخص رؤيتهحجب ذلك العميل
مزود إنترنت استهلاكي، ودرجة نظيفة، ونمط يشبه الكاشطاتقواعد السلوك والبصمات

وللصفوف الخاصة بـ IP وحده (Tor والمرحِّلات والماسحات وبادئات IPv6)، استخدم خريطة الإجراءات في دليلنا لاكتشاف البوتات عبر IP.

وماذا عن robots.txt؟ إنه يطلب ولا يفرض. يقول RFC 9309، معيار استبعاد الروبوتات، إن قواعده "ليست شكلًا من أشكال تفويض الوصول" (RFC 9309). احتفظ به للزواحف التي تحترمه، وطبّق كل ما عداه على خادمك. ويعرض دليلنا حجب زواحف الذكاء الاصطناعي طبقة التطبيق هذه بكود nginx وExpress.

ابدأ بسجلات الأمس. صدّر أكثر 50 عميلًا نشاطًا ممن لم يحمّلوا أي أصول، والصق كلًّا منهم في استعلام IP المجاني (30 استعلامًا في الدقيقة دون مفتاح، و1,500 يوميًّا بمفتاح مجاني)، وصنّفهم في الفئات الواردة في جدول الاستعلامات أعلاه. أما الباقون، النشطون على شبكات استهلاكية، فهم حيث تذهب قواعد السلوك لديك بعد ذلك.

الأسئلة الشائعة

كيف أحجب كاشطات الذكاء الاصطناعي مثل GPTBot أو CCBot؟

ابدأ بملف robots.txt: يحترمه كل من GPTBot وCCBot، لذا فقاعدة Disallow لرمزيهما توقف الزواحف المعلَنة. لكن robots.txt طلب وليس ضبط وصول (يقول RFC 9309 إن قواعده ليست شكلًا من أشكال تفويض الوصول)، فطبّق الحجب على خادمك أيضًا: تحقق من كل زاحف عبر نطاقات IP التي ينشرها، وعامِل العميل الذي يستخدم الاسم من خارج تلك النطاقات على أنه غير موثَّق. تشغّل OpenAI عدة بوتات بمهام مختلفة؛ ويشرح مقالنا GPTBot مقابل OAI-SearchBot مقابل ChatGPT-User أيها تحجب إن أردت البقاء في بحث ChatGPT.

كم طلبًا في الدقيقة يعني الكشط؟

لا يوجد رقم عالمي. قس خط الأساس البشري لديك في يوم عادي، لكل /24 في IPv4 ولكل /64 في IPv6، ثم انظر إلى الشبكات التي تتجاوزه بكثير. ويرفع المعدل وحده علمًا أيضًا على NAT المكاتب وCGNAT وخدمات المراقبة، لذا لا تعتبر المعدل المرتفع كشطًا إلا إذا اقترن بجلب الصفحات بالترتيب وغياب طلبات الأصول.

هل يمكن إيقاف كشط الويب تمامًا؟

لا. كل ما يستطيع المتصفح عرضه يستطيع الكاشط المصمم نسخه، بما في ذلك عبر البروكسيات السكنية والمتصفحات الحقيقية. الهدف هو جعل الكشط بطيئًا ومكلفًا ومرئيًّا: تحقق من الزواحف، وحدّد المعدل بحسب الشبكة، وتحدَّ العملاء الذين لا يتصرفون كالمتصفحات، وضع البيانات عالية القيمة خلف تسجيل دخول أو مفاتيح واجهة.

هل يوقف حجب عناوين IP لمراكز البيانات الكشط؟

جزئيًّا. فهو يوقف الكاشطات العاملة على خوادم سحابية رخيصة، لكنه يحجب أيضًا الزواحف الموثَّقة ما لم تسمح لها أولًا: في استعلاماتنا بتاريخ 2026-10-08 نال CCBot على AWS درجة 0 (allow) ونال Googlebot الحقيقي درجة 0 (allow)، وكلاهما على شبكات استضافة. ونال خادم Linode عادي درجة 10، وهو أيضًا allow، فلن تحجبه الدرجة وحدها. أما الكاشطات التي تستأجر بروكسيات سكنية فتتجاوز حجب مراكز البيانات كليًّا.

هل يستطيع استعلام IP إخباري بأن عنوانًا ما كاشط؟

لا. يخبرك الاستعلام بفئة الشبكة وبالخطر: زاحف موثَّق أو خادم مركز بيانات أو مخرج Tor أو VPN. أما كون ذلك العنوان يكشط موقعك فيأتي من سجلاتك: معدل طلباته وترتيب الصفحات التي يجلبها وهل يحمّل الأصول وهل يطابق User-Agent الخاص به الزاحف الذي يتحقق منه الاستعلام.

كيف أعرف أن الكاشط يستخدم بروكسيات سكنية؟

لا يمكنك معرفة ذلك من عنوان IP، ولا يكتشف GeoIPHub البروكسي السكني. ابحث عن عناوين IP استهلاكية كثيرة تتشارك نمط جلسة واحدًا: ترتيب الصفحات نفسه والتوقيت نفسه بين الطلبات والأصول المفقودة نفسها وبصمات TLS أو الجهاز المتشابهة. النمط عبر العناوين هو ما يكشف الكاشط لا أي عنوان منفرد.

بقلم

فريق GeoIPHub

الفريق الذي يقف وراء واجهة GeoIPHub API

بقلم فريق GeoIPHub، وهم من يبنون واجهة GeoIPHub API لاستخبارات IP وماسحها. تُعَدّ المسودات بمساعدة الذكاء الاصطناعي ويحررها الفريق، وأمثلة API استعلامات حقيقية على واجهة API الحية ما لم تُوصف بأنها توضيحية.

شارك هذا المقال
مزيد من المقالات

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