العودة إلى المدونة
الأساسيات نُشر في 19.08.2026 مدة القراءة 1 دقيقة

ما الذي يحمي النموذج فعلا: CAPTCHA وحقل المصيدة والمصيدة الزمنية وCSRF

تعتمد معظم نماذج الاتصال على حيلة واحدة لمكافحة البريد المزعج، وكثير منها لا يوقف إلا أبسط البوتات. ما الذي توقفه كل طبقة حماية، وما كلفتها، وأي تركيبة تناسبكم.

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

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

حقل المصيدة والمصيدة الزمنية: مرشحات غير مرئية

حقل المصيدة حقل إضافي لا يراه الناس أبدا، مثل حقل يسمى «website» مخفي بواسطة CSS. تملأ البوتات البسيطة كل الحقول، لذا يدل ملء حقل المصيدة على الأتمتة ويمكن للخادم استبعاد الرسالة بصمت. وتتجاوزه البوتات المكتوبة لموقعكم أو التي تعرض الصفحة كالمتصفح. أخفوه بصورة صحيحة: فالحقل الذي ينقل فقط خارج الشاشة قد تعلنه قارئات الشاشة، أو يصل إليه مفتاح Tab، أو تملؤه التعبئة التلقائية. استخدموا aria-hidden وtabindex -1 وautocomplete off، مع تسمية محايدة تطلب ممن يصل إليه تركه فارغا.

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

CAPTCHA: فعالة، لكن لها كلفة

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

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

رمز CSRF: حماية من التزوير، لا من البريد المزعج

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

ما الذي يجب أن يحدث على الخادم

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

تركيبة معقولة: طبقتان أو ثلاث

  1. 1ابدؤوا بالطبقات غير المرئية: حقل مصيدة يراعي إمكانية الوصول، ومصيدة زمنية موقعة، مع التحقق منهما على الخادم.
  2. 2أضيفوا حد معدل لكل عنوان IP حتى لا يتمكن مصدر واحد من إغراق النموذج.
  3. 3إذا استمر مرور البريد المزعج الموجه، فأضيفوا إثبات العمل أو CAPTCHA، ويفضل دون لغز مرئي ومع بديل يراعي إمكانية الوصول.
  4. 4أبقوا رمز CSRF الذي يوفره إطار عملكم، بوصفه إضافة مفيدة، لا وسيلة دفاع.
  5. 5اختبروا النتيجة كزائر، بلوحة المفاتيح وحدها ومع قارئ شاشة وعلى هاتف، وتحققوا من استمرار وصول الرسائل الحقيقية.

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