Programming language: Go
License: Apache License 2.0
Tags: Security    

Coraza alternatives and similar packages

Based on the "Security" category.
Alternatively, view coraza alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of Coraza or a related project?

Add another 'Security' Package


OWASP Coraza Web Application Firewall v2

Regression Tests Coreruleset Compatibility CodeQL Coverage Project Status: Active – The project has reached a stable, usable state and is being actively developed. OWASP Lab Project GoDoc

Welcome to OWASP Coraza Web Application Firewall, Coraza is a golang enterprise-grade Web Application Firewall framework that supports Modsecurity's seclang language and is 100% compatible with OWASP Core Ruleset.


  • Linux distribution (Debian and Centos are recommended, Windows is not supported yet)
  • Golang compiler v1.16+

Migrate from v1

  • Rollback SecAuditLog to the legacy syntax (serial/concurrent)
  • Attach an error log handler using waf.SetErrorLogCb(cb) (optional)
  • the function Transaction.Clean() must be used to clear transaction data, files and take them back to the sync pool.
  • If you are using @rx with libpcre (CRS) install the plugin github.com/jptosso/coraza-pcre
  • If you are using low level APIs check the complete changelog as most of them were removed.

Running the tests

Run the go tests:

go test ./...
go test -race ./...

Coraza v2 differences with v1

  • Full internal API refactor, public API has not changed
  • Full audit engine refactor with plugins support
  • New enhanced plugins interface for transformations, actions, body processors, and operators
  • We are fully compliant with Seclang from modsecurity v2
  • Many features removed and transformed into plugins: XML (Mostly), GeoIP and PCRE regex
  • Better debug logging
  • New error logging (like modsecurity)

Your first Coraza WAF project

package main

func main() {
    // First we initialize our waf and our seclang parser
    waf := coraza.NewWaf()
    parser, _ := seclang.NewParser(waf)

    // Now we parse our rules
    if err := parser.FromString(`SecRule REMOTE_ADDR "@rx .*" "id:1,phase:1,deny,status:403"`); err != nil {

    // Then we create a transaction and assign some variables
    tx := waf.NewTransaction()
    defer func(){
    tx.ProcessConnection("", 8080, "", 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)

Why Coraza WAF?


  • Simplicity: Anyone should be able to understand and modify Coraza WAF's source code
  • Extensibility: It should be easy to extend Coraza WAF with new functionalities
  • Innovation: Coraza WAF isn't just a ModSecurity port. It must include awesome new functions (in the meantime, it's just a port :sweat_smile:)
  • Community: Coraza WAF is a community project, and all ideas will be considered


  • New rule language
  • GraphQL body processor
  • C exports
  • WASM scripts support

Coraza WAF implementations

Some useful tools


How to contribute

Contributions are welcome. There are many TODOs, functionalities, fixes, bug reports, and any help you can provide. Just send your PR.

cd /path/to/coraza
egrep -Rin "TODO|FIXME" -R --exclude-dir=vendor *

Special thanks

  • Modsecurity team for creating ModSecurity
  • OWASP Coreruleset team for the CRS and their help

Companies using Coraza


For donations, see Donations site