
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 é 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.http/e2e/ fornece um utilitário para executar testes e2e.
Pode ser usado de forma independente contra sua própria implantação do WAF:
go run github.com/corazawaf/coraza/v3/http/e2e/cmd/httpe2e@main --proxy-hostport localhost:8080 --httpbin-hostport localhost:8081
ou como biblioteca importando:
"github.com/corazawaf/coraza/v3/http/e2e"
Como referência para o uso da biblioteca, veja testing/e2e/e2e_test.go.
As diretivas esperadas que devem ser carregadas e os flags disponíveis podem ser encontrados em http/e2e/cmd/httpe2e/main.go.
Coraza requer apenas Go para desenvolvimento. Você pode executar mage.go para emitir comandos de desenvolvimento.
Veja a lista de comandos
$ 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.
Por exemplo, para formatar seu código antes da submissão, execute
go run mage.go format
Contribuições são bem-vindas! Consulte CONTRIBUTING.md para orientações.
Para reportar um problema de segurança, siga este link e adicione uma descrição do problema, os passos que você seguiu para criá-lo, versões afetadas e, se conhecidas, mitigações para o problema.
Nossa equipe de gerenciamento de vulnerabilidades responderá dentro de 3 dias úteis após seu relato. Se o problema for confirmado como vulnerabilidade, abriremos um Advertência de Segurança. Este projeto segue um prazo de divulgação de 90 dias.
Para doações, veja o site de Doações.
Primeiramente, um enorme agradecimento ao Juan Pablo Tosso por iniciar este projeto e construir uma comunidade incrível ao redor do Coraza!
Hoje temos muitos contribuidores fantásticos, não teríamos conseguido sem vocês!
Feito com contrib.rocks.