
إطار اختبار لحلول أمن البريد الإلكتروني والتصفية.
إطار اختبار لحلول أمان البريد وتصفيته.
هام: لا تفعل أي شيء شرير بهذا! يجب دائمًا الحصول على موافقة من مزود الخدمة المختبرة عند اختبار الحلول السحابية أو المستضافة بطريقة أخرى. استخدم فقط حسابات الاختبار الخاصة بك ولا تزعج أي شخص بكمية من رسائل الاختبار.
يعمل إطار اختبار أمان البريد مع بايثون >=3.5. فقط اسحب هذا المستودع وابدأ. لا توجد تبعيات إضافية مطلوبة.
يقوم النص البرمجي mail-tester.py بتشغيل الاختبارات. اقرأ رسالة المساعدة باستخدام ./mail-tester.py --help وتحقق من قائمة وحدات الاختبار والتهرب باستخدام ./mail-tester.py -l للحصول على نظرة عامة حول الإمكانيات واستخدام النص البرمجي. بعض التلميحات:
--smtp-server و --to لتشغيل اختبار أساسي.--. يمكن استخدام ملفات التكوين هذه عن طريق استدعاء ./mail-tester.py @tester.conf (التكوين موجود في tester.conf).--to لاختبار تكوينات تصفية مختلفة.--auto-delay لتخفيف السرعة التلقائي للرسائل. يمكن ضبط ذلك بدقة باستخدام --delay-step و --delay-max و --delay.--spam-folder و --malware-folder. العينات غير مضمنة في هذا المستودع (ولن تكون). الأماكن الجيدة للحصول على البرامج الضارة هي theZoo أو Das Malwerk أو مجموعات أخرى. يمكن تصدير البريد العشوائي مباشرة من مجلد البريد العشوائي الخاص بك، ولكن يجب أن يكون بتنسيق EML.--blacklist وتستخدم كعناوين للمرسل.--evasion content-disposition. تم استخدام هذه الحيل في الماضي لإرباك حلول مكافحة الفيروسات/الحماية الرملية وتركها تمرر رسائل ضارة.--log. غالبًا ما يرفض مزودو تصفية البريد الرسائل في حوار SMTP، وهو ما ينعكس في السجل المُنشأ.--output كملفات عادية في دليل، أو بتنسيق MBox (--mbox) أو MailDir (--maildir). هذا مفيد لاختبار وكلاء البريد دون إرسال أي رسائل، أو لتوثيق أو مراجعة حالات الاختبار المُنشأة.يمكن تنفيذ اختبارات خاصة بك باستخدام فئة في أحد ملفات بايثون الموجودة أو المنشأة حديثًا في دليل tests/. يجب أن تكون الفئة فئة فرعية من MailTestBase الموجودة في الوحدة tests.base من هذا المشروع. يتم اكتشاف الاختبارات المنفذة حديثًا تلقائيًا عندما يتم تعيين متغير الفئة active إلى True. بالإضافة إلى ذلك (إذا كنت تخطط للمساهمة بالاختبارات مرة أخرى إلى المستودع الرئيسي)، يجب تعيين متغيرات الفئة identifier و name و description بشكل مناسب.
توجد الفئات الأساسية التالية مع طرق أو متغيرات فئة مخصصة للتجاوز:
MailTestBase: فئة اختبار للاختبارات العامة.
generateTestCases(): ينتج رسائل اختبار. يجب إنشاؤها باستخدام فئات MIME* من حزم Python email.mime.* أو باستخدام فئة Message من email.message لضمان رسائل بريد صالحة.active: قيمة منطقية تشير إلى ما إذا كان الاختبار نشطًا.identifier: معرف قصير للاختبار. يُستخدم لتمكين أو تعطيل الاختبارات في المعاملات.name: عنوان قصير للاختبار.description: وصف أطول للاختبار، يجب أن يتناسب مع حوالي 100 حرف.delivery_sender و delivery_recipient: قيم منطقية، False افتراضيًا. عادةً، يتم تعيين المرسل والمستلمين في الرسالة وتأخذها وحدة SMTP في بايثون من هناك. في بعض الأحيان يكون من المرغوب تعيينهما بشكل صريح في مكتبة SMTP، ويمكن تكوين ذلك عن طريق تعيين هذه القيم إلى .يوصى بشدة بتعيين موضوعات الرسائل المُنشأة لتتمكن من التعرف على الاختبارات في صندوق الوارد المستقبل.
تنفذ فئات التهرب تقنيات لتجنب التعرف على خصائص بريد معينة بواسطة حلول أمان البريد. حاليًا، تم تنفيذ تقنية تهرب تحاول إخفاء المرفقات من هذه الحلول عن طريق رؤوس Content-Disposition المكسورة عمدًا.
يتم تنفيذ التهرب باستخدام نمط فئة المصنع. تقوم فئة DeliveryBase بإنشاء فئة مصنع مشتقة من فئة BaseEvasionFactory. يستقبل منشئ المصنع علمًا يشير إلى ما إذا كان التهرب نشطًا. ثم يتم تمرير مثيل مصنع التهرب إلى فئة الاختبار وتخزينه في السمة evasions التي تحتوي على قاموس بمفاتيح معرفات التهرب. داخل الاختبار، يتم إنشاء فئة تهرب (مبنية على EvasionBase) باستخدام getEvasionGenerator(). يتم تعريف معاملات المنشئ بشكل فردي لكل تقنية تهرب.
تُستخدم الفئات الأساسية التالية لتنفيذ التهرب:
BaseEvasionFactory: يجب أن تستند مصانع التهرب إلى هذه الفئة. عادةً، يجب تعيين متغيرات الفئة التالية فقط:
active: تعيين إلى True إذا كان التهرب يجب أن يكون نشطًا.identifier: معرف قصير لوحدة التهرب يستخدم لتمكينها في تكوين الاختبار.name: عنوان قصير لتقنية التهرب.description: وصف أطول لتقنية التهرب. يجب أن يتناسب مع حوالي 100 حرف.generator_evasion: فئة التهرب التي يتم إنشاؤها إذا كان التهرب ممكّنًا.generator_default: فئة التهرب التي يتم إنشاؤها إذا كان التهرب معطلاً.BaseEvasion: يجب أن يكون تنفيذ التهرب فئة فرعية من هذه الفئة الأساسية. يجب تجاوز الطريقة التالية:
__init__(): يجب أن ينشئ الفئة مع الرسالة الأساسية أو المرفق الذي يجب التلاعب به باستخدام تقنيات التهرب.generate(): قم بتطبيق تقنية التهرب على الكائن الممرر إلى المنشئ وقدمه للمتصل كزوج (وصف، كائن مع تطبيق التهرب).بشكل عام، يجب أن تقدم فئة التهرب جميع متغيرات التهرب وتمرر الافتراضي كحالة اختبار مخصصة، بينما تقوم فئات التهرب الافتراضية فقط بتمرير الكائن المعطى أو إنشاء هياكل البيانات المطلوبة، مثل الرؤوس.
تُستخدم تقنيات التهرب في حالات الاختبار حيث تكون قابلة للتطبيق. على سبيل المثال، إذا كانت تقنية التهرب تتلاعب برأس البريد أو المرفق، فيجب تنفيذ الخطوات التالية:
self.evasions، على سبيل المثال:
evasion_items = self.evasions["evasion_identifier"].getEvasionGenerator(message)for evasion_item in evasion_items:
yield evasion_item
تم بالفعل تنفيذ تقنية التهرب Content Disposition في الإطار ويجب استخدامها لجميع حالات الاختبار التي تستهدف التعرف على المرفقات الضارة. يستقبل المنشئ مرفقًا واسم الملف المقصود. ثم تقوم فئة التهرب بإرجاع أزواج (اسم التهرب، مرفق مع تطبيق تقنية التهرب) التي يمكن إرجاعها مباشرة بواسطة طريقة generateAttachments() للاختبارات.
finalizeMessage(msg): افتراضيًا، تقوم فئة الاختبار الأساسية بتعيين رؤوس From و To وفقًا لذلك. يمكن تجاوز هذا السلوك إذا لزم الأمر لحالة الاختبار.MailAttachmentTestBase: فئة اختبار لحالات اختبار المرفقات. يُنشئ هذا رسالة بريد كاملة صالحة مع موضوع وجزء نصي ويرفق حالة الاختبار بها. مشتقة من MailTestBase، لذلك يمكن تجاوز الطرق/المتغيرات منها هنا أيضًا.
generateAttachments(): ينتج حالات اختبار كأزواج (وصف، مرفق).subject: يحدد الموضوع. يتم استبدال العنصر النائب {} بالوصف الذي تم إنتاجه بواسطة generateAttachments().generateTestCases(): تم تجاوزه بالفعل مع تنفيذ لتوليد الرسالة الموصوف أعلاه، ولكن يمكن تعديله أكثر إذا لزم الأمر.