تقنية المصيدة “وعاء العسل” لحماية تطبيقات الويب

هنالك الملايين من البرامج المتطفلة “الروبوتات” يجوبون الآن مواقع الويب. يتتبعون كل رابط يصلون إليه، ويبحثون عن النماذج (forms) التي يمكنهم ملؤها حتى يتمكنوا من نشر روابطهم غير المرغوب فيها. لا يوجد موقع على شبكة الانترنت بمنأى عن خطر التعرض لهذه الروبوتات.

مشكلة الروبوت “spambots”

إن مواقع الويب التي تحتوي نماذج “forms” إما لإضافة تعليقات أو لتسجيل حساب تكون معرضة لخطورة طلبات التسجيل الهائله غير البشرية والمؤتمتة، التي تقوم بإضافة قيم زائفة وترسلها إلى السيرفر، مما يؤدي إلى إغراق الموقع بالقيم غير الحقيقية .

موقع شمرا لم يكن مستثنى من هذه المشكلة، حيث في إحدى الفترات كثرت الحسابات العشوائية وازدادت بشكل كبير، وكان لا بد من التفكير بحلول.

بهذا المقال سنناقش أحد الحلول المميزة وقليلة التكلفة لحماية تطبيقات الويب والذي يُعرف باسم مصيدة وعاء العسل أو اختصاراً المصيدة “honeypot”.

ما هو حل “المصيدة” وكيف يساعدني على التخلص من السبام؟

المصيدة honeypot هي نوع من تقنيات منع البريد العشوائي والبرامج الطفيلية المصممة لخداع المتطفلين للكشف عن أنفسهم. تمامًا مثلما تنجذب الدببة لمصيدة العسل، بمجرد وقوع الروبوت في فخك ، يمكنك استخدام المعلومات التي تتلقاها حول منشئ الروبوت (أي عنوان IP الخاص به) لحظر هذا المستخدم ومنع المزيد من الرسائل غير المرغوب فيها.

ويكمن الحل بإضافة حقل غير مرئي إلى النماذج الخاصة بك “forms” والتي لا يمكن رؤيتها إلا من قبل الروبوت، فيقوم بتعبئتها وبالتالي الكشف عنها، بينما المستخدم الغعلي لا يراها وبالتالي لا يقوم بتعبئتها ويتركها فارغة.

ماذا تقصد أنه يمكن للروبوت رؤيتها بينما المستخدم لا يراها؟

المبدأ بسيط جداً، وهو أن الطلبات المؤتمتة تقوم بالزحف “crawl” على عناصر النموذج “inputs” واحدة تلو الأخرى وتملؤها جميعها بغض النظر إن كانت مخفية أم لا، وذلك ﻷن أغلب هذه الروبوتات لا يمكنها أن تفرق ما بين إذا كان العنصر مخفي (من خلال “CSS” او باستخدام الجافاسكريب) أو ظاهر، بينما الإنسان العادي ببساطة لن يراها بالواجهة أمامه.

ما ميزة هذا الحل؟

إضافة لكونه فعال بشكل كبير، يتحلى بالمميزات التالية:

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

مثال بسيط لتطبيق المصيدة:

ضمن نموذج تسجيل الحساب يمكننا إضافة عنصر إدخال “تحقق من كلمة المرور” مزيف ومخفي كالتالي:

<input type="text" name="password_checker" style="display:none !important" tabindex="-1" autocomplete="off">

الشروط التي يجب أن تتوافر في هذا العنصر:

  • إخفاؤه من خلال قواعد CSS
  • إضافة اسم يوحي بكونه عنصر إدخال حقيقي
  • لا يمكن ملؤه من خلال “التكملة التلقائية” 
  • لا يمكن الوصول إليه من خلال الضغط على المفتاح tab

أما من جهة السيرفر بلغة PHP

$honeypot = $_POST[password_checker];
if (!empty($honeypot) 
{ 
// This is spam
// you may add code here to log spam info etc.
} else { 
// proceed as normal 
}

وذلك بفرض أن الحقل يرسل من خلال الطريقة POST.

يختلف الكود السابق تبعا لطريقة إرسال معلومات الحقل، وتبعا لاحتياجك الخاص.

بعض الأفكار لتحسين المصيدة.

–  إضافة “مصيدة الوقت”، بحيث يمكن أن نقوم بحساب الزمن من بداية تحميل الصفحة إلى لحظة إرسال النموذج، إن كان أقل من قيمة معينة صغيرة (3 ثوان مثلا) يمكننا التنبؤ بأنه سبام، ﻷن المستخدم الفعلي من المستحيل أن يملأ نموذج كامل ضمن الوقت المحدد. 

– إخفاء النموذج باستخدام كود جافاسكريبت بدلا من تطبيق قواعد من خلال “CSS”

– الاستعانة بحقول لديها قيم مسبقة بدلاً من الفارغة، والتأكد بأنها احتفظت بقيمها الأصلية.

ما الحلول الأخرى المتاحة؟

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

بالإضافة لمجموعة من خدمات تصفية الروبوتات والتي تعتمد على خوارزميات ذكية والتعلم من المستخدمين الفعليين ومن أشهرها Akismet.

وفي الختام وبالعودة إلى حل المصيدة، فإن هنالك العديد من المكتبات الجاهزة لاستخدامها وتطبيقها على كافة منصات العمل والتقنيات، يمكن إيجادها هنا

لكن لا ضرر من كتابتها يدويا وإدارتها وذلك لسهولة تطبيقها وتعديلها بما يتناسب مع حاجتك أو بما يتطابق مع القواعد التي تتبعها تلك المكتبات.

بالرغم من فاعلية الحل إلا أنه يعاني من سلبيات خاصة إن كان منشئ الروبوت “spam bot” يستهدف موقعك بالذات سيقوم بتعديله تباعا بحيث يتجاوز المصيدة، لذا من المهم استخدام عدة حلول معاً بدل الاعتماد على حل وحيد بالذات.