
مكتبة جدار حماية تطبيقات الويب مبنية على Go ومتوافقة مع قواعد ModSecurity SecLang وOWASP Core Rule Set v4، توفر فحصًا فوريًا لحركة مرور HTTP وحجب الهجمات لتطبيقات الويب وواجهات برمجة التطبيقات.
كورازا - جدار حماية تطبيقات الويب
كورازا هو جدار حماية لتطبيقات الويب (WAF) مفتوح المصدر، على مستوى المؤسسات، عالي الأداء، جاهز لحماية تطبيقاتك المحبوبة. تمت كتابته بلغة Go، ويدعم مجموعات قواعد ModSecurity SecLang، وهو متوافق بنسبة 100% مع مجموعة القواعد الأساسية لـ OWASP الإصدار 4.
الميزات الرئيسية:
⇲ استبدال سلس - كورازا هو محرك بديل متوافق جزئياً مع Trustwaveمحرك OWASP ModSecurity ويدعم مجموعات قواعد SecLang القياسية في الصناعة.
🔥 الأمان - يقوم كورازا بتشغيل OWASP CRS الإصدار 4 (المعروف سابقاً باسم Core Rule Set) لحماية تطبيقات الويب الخاصة بك من مجموعة واسعة من الهجمات، بما في ذلك OWASP Top Ten، مع الحد الأدنى من الإنذارات الكاذبة. يحمي CRS من العديد من فئات الهجمات الشائعة بما في ذلك: حقن SQL (SQLi)، البرمجة النصية عبر المواقع (XSS)، حقن كود PHP و Java، HTTPoxy، Shellshock، كشف البرامج النصية/الماسح/الروبوت، وتسرب البيانات الوصفية والأخطاء. لاحظ أن الإصدارات الأقدم من CRS غير متوافقة.
🔌 قابل للتوسيع - كورازا هو مكتبة في جوهره، مع العديد من التكاملات لنشر مثيلات جدار حماية تطبيقات الويب في الموقع. مسجلات التدقيق، محركات الثبات، العوامل، الإجراءات، قم بإنشاء وظائفك الخاصة لتوسيع كورازا بقدر ما تريد.
🚀 الأداء - من المواقع الضخمة إلى المدونات الصغيرة، يمكن لكورازا التعامل مع الحمل بأقل تأثير على الأداء. تحقق من مقاييسنا
﹡ البساطة - أي شخص قادر على فهم وتعديل كود مصدر كورازا. من السهل توسيع كورازا بوظائف جديدة.
💬 المجتمع - كورازا هو مشروع مجتمعي، يتم قبول المساهمات وسيتم النظر في جميع الأفكار. ابحث عن إرشادات المساهمين في وثيقة المساهمة.
يحافظ مشروع Coraza على تطبيقات وإضافات للخوادم التالية:
يمكن استخدام كورازا كمكتبة لبرنامج Go الخاص بك لتنفيذ وسيط أمني أو دمجه مع التطبيقات وخوادم الويب الحالية.
package main
import (
"fmt"
"github.com/corazawaf/coraza/v3"
)
func main() {
// First we initialize our waf and our seclang parser
waf, err := coraza.NewWAF(coraza.NewWAFConfig().
WithDirectives(`SecRule REMOTE_ADDR "@rx .*" "id:1,phase:1,deny,status:403"`))
// Now we parse our rules
if err != nil {
fmt.Println(err)
}
// Then we create a transaction and assign some variables
tx := waf.NewTransaction()
defer func() {
tx.ProcessLogging()
tx.Close()
}()
tx.ProcessConnection("127.0.0.1", 8080, "127.0.0.1", 12345)
// Finally we process the request headers phase, which may return an interruption
if it := tx.ProcessRequestHeaders(); it != nil {
fmt.Printf("Transaction was interrupted with status %d\n", it.Status)
}
}
أمثلة/http-server يوفر مثالاً للتدرب على Coraza.
يمكن لعلامات بناء Go تعديل وظائف معينة أثناء وقت التجميع. هذه مخصصة لحالات الاستخدام المتقدمة فقط وليس لها ضمانات توافق عبر الإصدارات الثانوية - استخدمها بحذر.
coraza.disabled_operators.* - يستبعد العامل المحدد من التجميع. مفيد بشكل خاص عند تجاوز العامل باستخدام plugins.RegisterOperator لتقليل حجم الثنائي / عبء بدء التشغيل.coraza.rule.multiphase_evaluation - يمكّن تقييم متغيرات القاعدة في المراحل التي تكون جاهزة فيها، وليس فقط المرحلة التي تم تعريف القاعدة لها.coraza.no_memoize - يعطل التخزين المؤقت الافتراضي لمنشئي regex و aho-corasick. التخزين المؤقت مفعل افتراضياً ويستخدم ذاكرة تخزين مؤقت عامة لإعادة استخدام الأنماط المترجمة عبر مثيلات WAF، مما يقلل من استهلاك الذاكرة وعبء بدء التشغيل. في العمليات طويلة العمر التي تؤدي إعادة تحميل حية، استخدم WAF.Close() (عبر experimental.WAFCloser) لتحرير الإدخالات المخزنة مؤقتاً عند تدمير WAF، أو استخدم هذه العلامة للانسحاب من التخزين المؤقت بالكامل.no_fs_access - يشير إلى أن البيئة المستهدفة لا تملك وصولاً إلى نظام الملفات (FS) لعدم الاستفادة من وظائف نظام الملفات الخاصة بنظام التشغيل مثل مخازن جسم الملف المؤقتة.coraza.rule.case_sensitive_args_keys - يمكّن المطابقة الحساسة لحالة الأحرف لمفاتيح ARGS، مما يوافق سلوك Coraza مع مواصفات RFC 3986. سيتم تمكينه افتراضياً في الإصدار الرئيسي التالي.coraza.rule.no_regex_multiline - يعطل تمكين معدّلات تعدد الأسطر (multiline) الافتراضية في عامل @rx. يتوافق مع السلوك المتوقع لـ CRS، يقلل من الإيجابيات الكاذبة وقد يحسن الأداء. لن يتم تمكين تعدد الأسطر افتراضياً في الإصدار الرئيسي التالي. لمزيد من السياق، راجع هذا الطلب.coraza.rule.mandatory_rule_id_check - يمكّن التحقق الصارم من معرف القاعدة حيث يكون إجراء id مطلوباً لجميع SecRule/SecAction.coraza.rule.rx_prefilter - يعيّن القيمة الافتراضية للتوجيه SecRxPreFilter إلى On. يعمل على تحسين عامل @rx، بتخطي التعبير العادي الكامل عندما لا يمكن أن يتطابق الإدخال. علامة البناء هذه مخصصة لأغراض الاختبار فقط، اعتمد على التوجيه SecRxPreFilter لتكوين وقت التشغيل ووثائق أوسع حول هذه الميزة.http/e2e/ يوفر أداة لتشغيل اختبارات E2E.
يمكن استخدامها بشكل مستقل ضد نشر WAF الخاص بك:
go run github.com/corazawaf/coraza/v3/http/e2e/cmd/httpe2e@main --proxy-hostport localhost:8080 --httpbin-hostport localhost:8081
أو كمكتبة عن طريق الاستيراد:
"github.com/corazawaf/coraza/v3/http/e2e"
كمرجع لاستخدام المكتبة، راجع testing/e2e/e2e_test.go.
التوجيهات المتوقعة التي يجب تحميلها والعلامات المتاحة يمكن العثور عليها في http/e2e/cmd/httpe2e/main.go.