
Go-basierte Web Application Firewall-Bibliothek, kompatibel mit ModSecurity SecLang-Regeln und dem OWASP Core Rule Set v4, die Echtzeit-Überprüfung von HTTP-Datenverkehr und Angriffsblockierung für Webanwendungen und APIs bietet.
Coraza ist eine quelloffene, unternehmensgerechte, leistungsstarke Web Application Firewall (WAF), bereit, Ihre geschätzten Anwendungen zu schützen. Es ist in Go geschrieben, unterstützt ModSecurity SecLang-Regelsätze und ist 100% kompatibel mit dem OWASP Core Rule Set v4.
Hauptmerkmale:
⇲ Drop-in - Coraza ist eine alternative Engine mit teilweiser Kompatibilität zu TrustwaveOWASP ModSecurity Engine und unterstützt branchenübliche SecLang-Regelsätze.
🔥 Sicherheit - Coraza führt die OWASP CRS v4 (ehemals Core Rule Set) aus, um Ihre Webanwendungen vor einer Vielzahl von Angriffen zu schützen, einschließlich der OWASP Top Ten, mit minimalen Fehlalarmen. CRS schützt vor vielen gängigen Angriffskategorien: SQL Injection (SQLi), Cross Site Scripting (XSS), PHP & Java Code Injection, HTTPoxy, Shellshock, Scripting/Scanner/Bot Erkennung & Metadaten & Fehlerlecks. Beachten Sie, dass ältere Versionen des CRS nicht kompatibel sind.
🔌 Erweiterbar - Coraza ist im Kern eine Bibliothek mit vielen Integrationen für den Einsatz von On-Premise Web Application Firewalls. Audit-Logger, Persistenz-Engines, Operatoren, Aktionen – erstellen Sie Ihre eigenen Funktionen, um Coraza beliebig zu erweitern.
🚀 Leistung - Von großen Websites bis zu kleinen Blogs, Coraza bewältigt die Last mit minimalen Leistungseinbußen. Siehe unsere Benchmarks
﹡ Einfachheit - Jeder kann den Quellcode von Coraza verstehen und ändern. Es ist einfach, Coraza mit neuen Funktionen zu erweitern.
💬 Community - Coraza ist ein Community-Projekt, Beiträge sind willkommen und alle Ideen werden berücksichtigt. Anleitungen für Mitwirkende finden Sie im CONTRIBUTION-Dokument.
Das Coraza-Projekt unterhält Implementierungen und Plugins für die folgenden Server:
Coraza kann als Bibliothek für Ihr Go-Programm verwendet werden, um eine Sicherheits-Middleware zu implementieren oder in bestehende Anwendungen und Webserver zu integrieren.
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)
}
}
Examples/http-server bietet ein Beispiel zum Üben mit Coraza.
Go-Build-Tags können bestimmte Funktionalitäten zur Compile-Zeit anpassen. Diese sind nur für fortgeschrittene Anwendungsfälle gedacht und haben keine Kompatibilitätsgarantien über Nebenversionen hinweg – mit Bedacht verwenden.
coraza.disabled_operators.* - schließt den angegebenen Operator von der Kompilierung aus. Besonders nützlich, wenn der Operator mit plugins.RegisterOperator überschrieben wird, um Binärgröße/Startzeit zu reduzieren.coraza.rule.multiphase_evaluation - aktiviert die Auswertung von Regelvariablen in den Phasen, in denen sie bereit sind, nicht nur in der Phase, für die die Regel definiert ist.coraza.no_memoize - deaktiviert die standardmäßige Memoisierung der Regex- und Aho-Corasick-Builder. Memoisierung ist standardmäßig aktiviert und verwendet einen globalen Cache, um kompilierte Muster über WAF-Instanzen hinweg wiederzuverwenden, was den Speicherverbrauch und den Startaufwand reduziert. In langlebigen Prozessen, die Live-Reloads durchführen, verwenden Sie WAF.Close() (über experimental.WAFCloser), um zwischengespeicherte Einträge freizugeben, wenn eine WAF zerstört wird, oder verwenden Sie dieses Tag, um die Memoisierung vollständig zu deaktivieren.no_fs_access - gibt an, dass die Zielumgebung keinen Zugriff auf das Dateisystem hat, um dateisystembezogene Funktionen wie Dateibody-Puffer nicht zu nutzen.coraza.rule.case_sensitive_args_keys - aktiviert die case-sensitive Übereinstimmung für ARGS-Schlüssel, um das Verhalten von Coraza an die RFC 3986-Spezifikation anzupassen. Es wird standardmäßig in der nächsten Hauptversion aktiviert.coraza.rule.no_regex_multiline - deaktiviert das standardmäßige Aktivieren von Regex-Mehrzeilen-Modifikatoren im @rx Operator. Passt sich dem erwarteten Verhalten des CRS an, reduziert Fehlalarme und kann die Leistung verbessern. Keine Mehrzeilen-Regex standardmäßig wird in der nächsten Hauptversion aktiviert. Weitere Kontext finden Sie in diesem PR.coraza.rule.mandatory_rule_id_check - aktiviert die strikte Regel-ID-Prüfung, bei der die id-Aktion für alle SecRule/SecAction erforderlich ist.coraza.rule.rx_prefilter - setzt den Standardwert der SecRxPreFilter-Direktive auf On. Optimiert den @rx Operator, indem die vollständige Regex übersprungen wird, wenn eine Eingabe nicht übereinstimmen kann. Dieses Build-Tag ist nur für Testzwecke gedacht; verwenden Sie für die Laufzeitkonfiguration und umfassendere Dokumentation zu dieser Funktion die SecRxPreFilter-Direktive.http/e2e/ bietet ein Dienstprogramm zum Ausführen von E2E-Tests.
Es kann eigenständig gegen Ihre eigene WAF-Bereitstellung verwendet werden:
go run github.com/corazawaf/coraza/v3/http/e2e/cmd/httpe2e@main --proxy-hostport localhost:8080 --httpbin-hostport localhost:8081
oder als Bibliothek durch Importieren:
"github.com/corazawaf/coraza/v3/http/e2e"
Als Referenz zur Bibliotheksnutzung siehe testing/e2e/e2e_test.go.
Erwartete Direktiven, die geladen werden müssen, und verfügbare Flags finden Sie in http/e2e/cmd/httpe2e/main.go.
Coraza erfordert nur Go für die Entwicklung. Sie können mage.go ausführen, um Entwicklungsbefehle zu geben.
Siehe die Liste der Befehle
$ 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.
Um beispielsweise Ihren Code vor der Einreichung zu formatieren, führen Sie aus:
go run mage.go format
Beiträge sind willkommen! Bitte lesen Sie CONTRIBUTING.md für Anleitungen.
Um ein Sicherheitsproblem zu melden, folgen Sie bitte diesem Link und fügen Sie eine Beschreibung des Problems, die Schritte, die Sie zur Erstellung des Problems unternommen haben, betroffene Versionen und, falls bekannt, Abhilfemaßnahmen für das Problem hinzu.
Unser Schwachstellenmanagement-Team wird innerhalb von 3 Werktagen auf Ihren Bericht antworten. Wenn das Problem als Schwachstelle bestätigt wird, eröffnen wir ein Security Advisory. Dieses Projekt folgt einem 90-tägigen Offenlegungszeitplan.
Für Spenden siehe Spendenseite.
Zuallererst ein großer Dank an Juan Pablo Tosso für den Start dieses Projekts und den Aufbau einer großartigen Community rund um Coraza!
Heute haben wir viele großartige Mitwirkende; ohne Sie hätten wir das nicht geschafft!
Erstellt mit contrib.rocks.