
Libreria firewall per applicazioni web basata su Go, compatibile con le regole ModSecurity SecLang e con l'OWASP Core Rule Set v4, che fornisce ispezione del traffico HTTP in tempo reale e blocco degli attacchi per applicazioni web e API.
Coraza è un Web Application Firewall (WAF) open source, di livello enterprise e ad alte prestazioni, pronto a proteggere le tue applicazioni preferite. È scritto in Go, supporta set di regole SecLang compatibili con ModSecurity ed è 100% compatibile con OWASP Core Rule Set v4.
Caratteristiche principali:
⇲ Sostituibile - Coraza è un motore alternativo con compatibilità parziale con TrustwaveOWASP ModSecurity Engine e supporta set di regole SecLang standard del settore.
🔥 Sicurezza - Coraza esegue OWASP CRS v4 (precedentemente noto come Core Rule Set) per proteggere le tue applicazioni web da un'ampia gamma di attacchi, inclusi i primi dieci rischi OWASP, con un minimo di falsi allarmi. CRS protegge da molte categorie di attacchi comuni tra cui: SQL Injection (SQLi), Cross Site Scripting (XSS), Code Injection PHP e Java, HTTPoxy, Shellshock, Rilevamento di script/scanner/bot e perdite di metadati ed errori. Nota che le versioni precedenti di CRS non sono compatibili.
🔌 Estensibile - Coraza è una libreria al suo interno, con molte integrazioni per distribuire istanze WAF on-premise. Logger di audit, motori di persistenza, operatori, azioni: crea le tue funzionalità per estendere Coraza quanto vuoi.
🚀 Prestazioni - Dai grandi siti web ai piccoli blog, Coraza può gestire il carico con un impatto minimo sulle prestazioni. Dai un'occhiata ai nostri Benchmark
﹡ Semplicità - Chiunque è in grado di comprendere e modificare il codice sorgente di Coraza. È facile estendere Coraza con nuove funzionalità.
💬 Community - Coraza è un progetto della community, i contributi sono accettati e tutte le idee verranno prese in considerazione. Trova indicazioni per i contributori nel documento CONTRIBUTION.
Il Progetto Coraza mantiene implementazioni e plugin per i seguenti server:
Coraza può essere utilizzato come libreria per il tuo programma Go per implementare un middleware di sicurezza o integrarlo con applicazioni e webserver esistenti.
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 fornisce un esempio per fare pratica con Coraza.
I tag di build Go possono ottimizzare alcune funzionalità in fase di compilazione. Sono solo per casi d'uso avanzati e non offrono garanzie di compatibilità tra versioni minori - usare con cautela.
coraza.disabled_operators.* - esclude l'operatore specificato dalla compilazione. Particolarmente utile se si sovrascrive l'operatore con plugins.RegisterOperator per ridurre le dimensioni binarie / l'overhead di avvio.coraza.rule.multiphase_evaluation - abilita la valutazione delle variabili delle regole nelle fasi in cui sono pronte, non solo nella fase per cui la regola è definita.coraza.no_memoize - disabilita la memoizzazione predefinita dei builder regex e aho-corasick. La memoizzazione è abilitata per default e utilizza una cache globale per riutilizzare pattern compilati tra le istanze WAF, riducendo il consumo di memoria e l'overhead di avvio. Nei processi longevi che eseguono ricariche a caldo, usa WAF.Close() (tramite experimental.WAFCloser) per rilasciare le voci memorizzate nella cache quando un WAF viene distrutto, oppure usa questo tag per rinunciare completamente alla memoizzazione.no_fs_access - indica che l'ambiente di destinazione non ha accesso al filesystem per non sfruttare le funzionalità del filesystem del sistema operativo, ad esempio buffer per il corpo del file.coraza.rule.case_sensitive_args_keys - abilita la corrispondenza case-sensitive per le chiavi ARGS, allineando il comportamento di Coraza con la specifica RFC 3986. Sarà abilitato per default nella prossima versione principale.coraza.rule.no_regex_multiline - disabilita l'abilitazione per default dei modificatori multilinea delle regex nell'operatore @rx. Si allinea al comportamento atteso da CRS, riduce i falsi positivi e può migliorare le prestazioni. Nessuna regex multilinea per default sarà abilitata nella prossima versione principale. Per ulteriore contesto controlla questa PR.coraza.rule.mandatory_rule_id_check - abilita un controllo rigoroso dell'ID regola dove l'azione id è richiesta per tutti i SecRule/SecAction.coraza.rule.rx_prefilter - imposta il valore predefinito della direttiva SecRxPreFilter su On. Ottimizza l'operatore @rx, saltando la regex completa quando un input non può corrispondere. Questo build tag è inteso solo a scopo di test; affidati alla direttiva SecRxPreFilter per la configurazione in esecuzione e una documentazione più ampia su questa funzionalità.http/e2e/ fornisce un'utilità per eseguire test e2e.
Può essere usato autonomamente contro il tuo deployment waf:
go run github.com/corazawaf/coraza/v3/http/e2e/cmd/httpe2e@main --proxy-hostport localhost:8080 --httpbin-hostport localhost:8081
o come libreria importando:
"github.com/corazawaf/coraza/v3/http/e2e"
Come riferimento per l'uso come libreria, vedi testing/e2e/e2e_test.go.
Le direttive previste che devono essere caricate e i flag disponibili si trovano in http/e2e/cmd/httpe2e/main.go.
Coraza richiede solo Go per lo sviluppo. Puoi eseguire mage.go per emettere comandi di sviluppo.
Vedi l'elenco dei comandi
$ 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.
Ad esempio, per formattare il tuo codice prima dell'invio, esegui
go run mage.go format
I contributi sono benvenuti! Consulta CONTRIBUTING.md per le linee guida.
Per segnalare un problema di sicurezza, segui questo link e aggiungi una descrizione del problema, i passi che hai eseguito per crearlo, le versioni interessate e, se note, le mitigazioni per il problema.
Il nostro team di gestione delle vulnerabilità risponderà entro 3 giorni lavorativi dalla tua segnalazione. Se il problema viene confermato come vulnerabilità, apriremo un Advisory di sicurezza. Questo progetto segue una tempistica di divulgazione di 90 giorni.
Per le donazioni, visita il sito delle donazioni.
Prima di tutto, un enorme grazie a Juan Pablo Tosso per aver avviato questo progetto e costruito una community straordinaria intorno a Coraza!
Oggi abbiamo molti contributori fantastici, non ce l'avremmo fatta senza di voi!
Realizzato con contrib.rocks.