العودة إلى المدونة
الهندسة نُشر في 27.08.2026 مدة القراءة 1 دقيقة

CAPTCHA موجودة، لكنها لا تحمي شيئا

لا يدل عنصر reCAPTCHA أو hCaptcha أو Turnstile المرئي كثيرا على حماية النموذج. إليكم أخطاء الإعداد الشائعة وكيف تفحصون نماذجكم خلال دقائق.

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

أين تحدث الحماية فعلا

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

السلسلة التي تعتمد عليها CAPTCHA
1تحميل النص البرمجي
يحمل النص البرمجي للمزود ويسمح له بالعمل في صفحة النموذج.
2إصدار الرمز
يتلقى المتصفح رمزا قصير العمر لا يمكن استخدامه إلا مرة واحدة.
3إرسال الرمز
يرسل الرمز إلى الخادم مع حقول النموذج.
4تحقق الخادم
يتحقق خادمكم من الرمز لدى المزود باستخدام المفتاح السري.
5قرار الخادم
يرفض الإرسال ما لم تكن الإجابة إيجابية (ولـ v3، ما لم تكن الدرجة مرتفعة بما يكفي).
لا توجد الحماية إلا إذا عملت كل خطوة، وتحدث الخطوات الحاسمة على الخادم بعيدا عن الأنظار.

مفتاح الاختبار الذي يسمح بمرور كل شيء

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

رمز لا يتحقق منه أحد

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

عندما لا يحمل عنصر الواجهة فعليا

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

وتوجد حالتان يسهل إغفالهما. ففي reCAPTCHA v3، لا تبين الشارة في الزاوية إلا أن النص البرمجي محمل في مكان ما من الصفحة، ربما بواسطة القالب أو إضافة أخرى، بينما يكون الدمج في إضافة النموذج نفسها معطلا. ويمكن لإضافات التخزين المؤقت حفظ صفحة مع رمز مضمن في HTML. ولا تصح رموز CAPTCHA إلا لدقائق قليلة ولا يمكن التحقق منها إلا مرة واحدة، لذا يفشل الرمز المخزن مؤقتا للزوار الحقيقيين؛ أما «الإصلاح» المغري بتعطيل الفحص فيزيل الحماية بصمت.

المظهر والواقع
ما ترونه
  • يعرض عنصر الواجهة إشعار «لأغراض الاختبار فقط»
  • تظهر شارة v3 في الزاوية
  • يظهر عنصر الواجهة ويعيد رمزا
  • توقف البريد المزعج، لكن الاستفسارات الحقيقية توقفت أيضا
ما قد يحدث فعليا
  • تستخدم مفاتيح اختبار عامة وينجح كل تحقق
  • دمج reCAPTCHA في إضافة النموذج معطل
  • لا يرسل الخادم الرمز للتحقق أبدا، أو يتجاهل النتيجة
  • مفتاح الموقع غير مسجل للنطاق، أو انتهت صلاحية الرموز المخزنة مؤقتا

فحص ذاتي قصير

  1. 1افتحوا صفحة النموذج في نافذة خاصة، وافتحوا أدوات المطور في المتصفح، وابحثوا في وحدة التحكم عن أخطاء النص البرمجي لـ CAPTCHA.
  2. 2تحققوا من ظهور عنصر الواجهة فعليا، مرة قبل قبول شريط ملفات تعريف الارتباط ومرة بعده، ومن تعذر إرسال النموذج عند غيابه.
  3. 3تحققوا في لوحة إدارة المزود من إدراج نطاقكم الفعلي لمفتاح الموقع (بما يشمل الصيغ مثل www)، ومن مطابقة المفاتيح في إضافة النموذج أو الكود له، وألا تكون مفاتيح من الوثائق أو إعداد تجريبي.
  4. 4تأكدوا في إعدادات إضافة النموذج من تفعيل دمج CAPTCHA لهذا النموذج تحديدا؛ وبالنسبة إلى reCAPTCHA v3، تحققوا من أن عتبة الدرجة أعلى من 0.
  5. 5إذا كان بإمكانكم الوصول إلى الكود، فابحثوا عن التحقق على الخادم وتأكدوا من رفضه الإرسال عندما تكون الإجابة سلبية أو الرمز غائبا.
  6. 6استثنوا صفحة النموذج من التخزين المؤقت للصفحة كاملة، أو تأكدوا من إنشاء الرمز حديثا في المتصفح.
  7. 7أرسلوا رسالة اختبار حقيقية وتحققوا من وصولها؛ وكرروا الفحص بعد تغيير القالب أو الإضافات أو أداة الموافقة.
ما الذي يستطيع الفحص الخارجي رؤيته وما الذي لا يستطيع
يمكن رؤية مفاتيح الاختبار، وشيفرة عنصر الواجهة دون نصها البرمجي، وأخطاء وحدة التحكم والنصوص البرمجية المحظورة من الخارج؛ ويبحث فحص مجاني على formexposed.com عن هذه الإشارات تحديدا دون إرسال شيء. ولا يظهر في الصفحة ما إذا كان خادمكم يتحقق من الرمز فعلا؛ فهذا لا يتبين إلا في كود الخادم أو في إرسال حقيقي.

CAPTCHA طبقة واحدة وليست الحماية كلها. وعند جمعها مع حقل مصيدة وفحص زمني وتصفية على الخادم، لا يترك خطأ إعداد في موضع واحد النموذج مفتوحا بالكامل. وإذا أردتم صورة سريعة عن وضع نماذجكم، فأدخلوا نطاقكم على formexposed.com؛ يبين التقرير ما إذا كانت أجزاء إعداد CAPTCHA التي يمكن رؤيتها من الخارج سليمة.