
مكتبة جدار حماية تطبيقات الويب مبنية على 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) الافتراضية في عامل . يتوافق مع السلوك المتوقع لـ CRS، يقلل من الإيجابيات الكاذبة وقد يحسن الأداء. لن يتم تمكين تعدد الأسطر افتراضياً في الإصدار الرئيسي التالي. لمزيد من السياق، راجع .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.
يتطلب Coraza فقط Go للتطوير. يمكنك تشغيل mage.go لإصدار أوامر التطوير.
شاهد قائمة الأوامر:
$ go run mage.go -l
Targets:
check runs lint and tests.
coverage runs tests with coverage and race detector enabled.
doc runs godoc, access at http://localhost:6060.
format formats code in this repository.
fuzz runs fuzz tests.
lint verifies code quality.
precommit installs a git hook to run check when committing.
test runs all tests.
على سبيل المثال، لتنسيق الكود قبل التقديم، قم بتشغيل:
go run mage.go format
المساهمات مرحب بها! يرجى الرجوع إلى CONTRIBUTING.md للحصول على إرشادات.
للإبلاغ عن مشكلة أمنية، يرجى اتباع هذا الرابط وإضافة وصف للمشكلة، والخطوات التي اتخذتها لإنشاء المشكلة، والإصدارات المتأثرة، وإذا أمكن، الإجراءات التخفيفية للمشكلة.
سيقوم فريق إدارة الثغرات لدينا بالرد في غضون 3 أيام عمل من تقريرك. إذا تم تأكيد المشكلة كضعف، سنقوم بفتح استشارة أمنية. يتبع هذا المشروع جدولاً زمنياً للإفصاح مدته 90 يوماً.
للتبرعات، راجع موقع التبرعات.
أولاً وقبل كل شيء، شكر كبير لـ خوان بابلو توسو على بدء هذا المشروع، وبناء مجتمع رائع حول Coraza!
اليوم لدينا الكثير من المساهمين الرائعين، لم نكن لنتمكن من فعل ذلك بدونكم!
تم إنشاؤه بواسطة contrib.rocks.
@rxcoraza.rule.mandatory_rule_id_check - يمكّن التحقق الصارم من معرف القاعدة حيث يكون إجراء id مطلوباً لجميع SecRule/SecAction.coraza.rule.rx_prefilter - يعيّن القيمة الافتراضية للتوجيه SecRxPreFilter إلى On. يعمل على تحسين عامل @rx، بتخطي التعبير العادي الكامل عندما لا يمكن أن يتطابق الإدخال. علامة البناء هذه مخصصة لأغراض الاختبار فقط، اعتمد على التوجيه SecRxPreFilter لتكوين وقت التشغيل ووثائق أوسع حول هذه الميزة.