
إطار عمل لاختبار جدران حماية تطبيقات الويب (FTW!)
تم إنشاء هذا المشروع بواسطة باحثين من ModSecurity و Fastly للمساعدة في توفير اختبارات صارمة لقواعد جدار حماية تطبيقات الويب (WAF). يستخدم مجموعة القواعد الأساسية لـ OWASP الإصدار 3 كخط أساس لاختبار القواعد على جدار حماية التطبيقات. يتم تحميل كل قاعدة من مجموعة القواعد في ملف YAML يقوم بإصدار طلبات HTTP من شأنها تفعيل هذه القواعد.
الأهداف / حالات الاستخدام تشمل:
git clone [email protected]:fastly/ftw.gitcd ftwapt-get install python-pippip install -r requirements.txtpy.test test/test_default.py --ruledir test/yamlإذا كنت بحاجة إلى بيئة لاختبار قواعد جدار الحماية، فقد تم إنشاء واحدة مع Apache و Modsecurity والإصدار 3.0.0 من مجموعة القواعد الأساسية لـ OWASP. يمكن نشر ذلك عن طريق:
git clone https://github.com/fastly/waf_testbed.gitvagrant uppy.test test/test_default.py --ruledir=test/yaml --destaddr=domain.com --port 443 --protocol httpspy.test test/integration/test_logcontains.py -s --ruledir=test/integration/*.py مع الاستيرادات اللازمة، يوجد مثال في test/integration/test_logcontains.pytest* سيتم تشغيلها بواسطة py.test، لذا قم بإنشاء دالة def test_somewafLogChecker
get_logs(). سيقوم FTW باستدعاء هذه الدالة بعد تشغيل الاختبار، وسيقوم بتعيين أوقات self.start و self.endget_logs()py.test fixtures. استخدم مصمم الدالة @pytest.fixture، وأعد كائن LogChecker الجديد الخاص بك. عندما تستخدم وسيط دالة في اختباراتك يطابق اسم ذلك @pytest.fixture، فسيتم إنشاء الكائن الخاص بك ويجعل تشغيل الاختبارات أسهل. مثال على ذلك موجود في ملف Python من الخطوة 1.*.yaml كما هو موضح في test/integration/LOGCONTAINSFIXTURE.yaml، يتطلب سطر log_contains سلسلة نصية هي تعبير منتظم. سيقوم FTW بتجميع سلسلة log_contains من كل مرحلة في ملف YAML إلى تعبير منتظم. سيتم استخدام هذا التعبير المنتظم بعد ذلك مع أسطر السجلات التي تم تمريرها من get_logs() للبحث عن تطابق. يجب أن تكون سلسلة log_contains إذن معرف قاعدة فريدًا نظرًا لأن FTW جشع وسيمرر على أول تطابق. يتم تقليل الإيجابيات الخاطئة بفضل وقت البدء/الانتهاء الذي تم تمريره إلى كائن LogChecker، ولكن من الأفضل أن تكون آمنًا واستخدام تعبيرات منتظمة فريدة.get_logs()، لذا تأكد من مراعاة استدعاءات API إذا كانت هذه هي الطريقة التي تسترجع بها سجلاتك.على الرغم من أنه يفضل إجراء الطلبات باستخدام تنسيق YAML، إلا أن الاختبارات الآلية غالبًا ما تتطلب إجراء العديد من الطلبات الديناميكية. في هذه الحالة، يوصى باستخدام إطار py.test من أجل إنتاج حالات اختبار يمكن تشغيلها كجزء من الكل. بشكل عام، إجراء طلب HTTP بسيط:
HttpUA()Input() مع توفير أي معلمات لا تريد أن تكون افتراضيةInput إلى HttpUA.send_request()للحصول على بعض الأمثلة، راجع اختبارات http التكاملية