
Biblioteca de Firewall de Aplicação Web baseada em Go, compatível com regras ModSecurity SecLang e OWASP Core Rule Set v4, fornecendo inspeção de tráfego HTTP em tempo real e bloqueio de ataques para aplicações web e APIs.
Coraza - Firewall de Aplicação Web
Coraza é um Firewall de Aplicação Web (WAF) de código aberto, de nível empresarial e alto desempenho, pronto para proteger suas aplicações. Escrito em Go, suporta conjuntos de regras no formato SecLang do ModSecurity e é 100% compatível com o OWASP Core Rule Set v4.
Principais Características:
⇲ Plug-and-Play - Coraza é um motor alternativo com compatibilidade parcial com Trustwave Motor ModSecurity do OWASP e suporta conjuntos de regras no padrão SecLang da indústria.
🔥 Segurança - O Coraza executa o OWASP CRS v4 (antigamente conhecido como Core Rule Set) para proteger suas aplicações web contra uma ampla gama de ataques, incluindo o OWASP Top Ten, com o mínimo de falsos alertas. O CRS protege contra muitas categorias comuns de ataque, incluindo: Injeção SQL (SQLi), Cross Site Scripting (XSS), Injeção de Código PHP e Java, HTTPoxy, Shellshock, Detecção de Scripts/Scanners/Bots, Vazamentos de Metadados e Erros. Observe que versões mais antigas do CRS não são compatíveis.
🔌 Extensível - Coraza é uma biblioteca em seu núcleo, com muitas integrações para implantar instâncias de WAF on-premise. Loggers de auditoria, mecanismos de persistência, operadores, ações — crie suas próprias funcionalidades para estender o Coraza o quanto quiser.
🚀 Desempenho - De sites enormes a pequenos blogs, o Coraza pode suportar a carga com impacto mínimo no desempenho. Confira nossos Benchmarks
﹡ Simplicidade - Qualquer pessoa pode entender e modificar o código-fonte do Coraza. É fácil estender o Coraza com novas funcionalidades.
💬 Comunidade - Coraza é um projeto comunitário, contribuições são aceitas e todas as ideias serão consideradas. Encontre orientações para contribuidores no documento CONTRIBUIÇÃO.
O Projeto Coraza mantém implementações e plugins para os seguintes servidores:
Coraza pode ser usado como biblioteca para seu programa Go, implementando um middleware de segurança ou integrando-o a aplicações e servidores web existentes.
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 fornece um exemplo para praticar com o Coraza.
Tags de build do Go podem ajustar certas funcionalidades em tempo de compilação. São apenas para casos de uso avançado e não possuem garantias de compatibilidade entre versões menores — use com cuidado.
coraza.disabled_operators.* - exclui o operador especificado da compilação. Particularmente útil ao sobrescrever o operador com plugins.RegisterOperator para reduzir o tamanho do binário / sobrecarga de inicialização.coraza.rule.multiphase_evaluation - ativa a avaliação de variáveis de regra nas fases em que estão prontas, não apenas na fase para a qual a regra está definida.coraza.no_memoize - desativa a memorização padrão dos construtores de regex e aho-corasick. A memorização é ativada por padrão e usa um cache global para reutilizar padrões compilados entre instâncias do WAF, reduzindo o consumo de memória e a sobrecarga de inicialização. Em processos de longa duração que realizam recargas ao vivo, use WAF.Close() (através de experimental.WAFCloser) para liberar entradas em cache quando um WAF é destruído, ou use esta tag para desativar a memorização completamente.no_fs_access - indica que o ambiente alvo não tem acesso ao sistema de arquivos, para não utilizar funcionalidades relacionadas ao sistema de arquivos do SO, ex.: buffers de corpo de arquivo.coraza.rule.case_sensitive_args_keys - ativa a correspondência sensível a maiúsculas/minúsculas para chaves ARGS, alinhando o comportamento do Coraza com a especificação RFC 3986. Será ativado por padrão na próxima versão principal.coraza.rule.no_regex_multiline - desativa a ativação por padrão dos modificadores multiline em regex no operador @rx. Alinha-se ao comportamento esperado do CRS, reduz falsos positivos e pode melhorar o desempenho. Nenhum regex multiline por padrão será ativado na próxima versão principal. Para mais contexto, veja este PR.coraza.rule.mandatory_rule_id_check - ativa a verificação rigorosa de id de regra, onde a ação id é obrigatória para todo SecRule/SecAction.coraza.rule.rx_prefilter - define o valor padrão da diretiva SecRxPreFilter como On. Otimiza o operador @rx, pulando a regex completa quando uma entrada não pode corresponder. Esta tag de build é destinada apenas a fins de teste; utilize a diretiva SecRxPreFilter para configuração em tempo de execução e documentação mais ampla sobre este recurso.