{"adoption": {"forks": 193, "observed_at": "2026-08-28T04:05:14.083726+00:00", "stars": 1631}, "canonical_url": "https://ross.abutalabs.com/products/ngx_waf", "card": {"archived": false, "artifact_type": "plugin", "description": "Handy, High performance, ModSecurity compatible Nginx firewall module & 方便、高性能、兼容 ModSecurity 的 Nginx 防火墙模块", "domain": ["security", "web-development", "backend"], "enriched": true, "function": ["security", "middleware", "rate-limiting"], "health_score": 33, "homepage": "https://add-sp.github.io/ngx_waf-docs/", "language": "C", "license": "BSD-3-Clause", "license_family": "permissive", "maturity": "active", "member_repos": ["ADD-SP/ngx_waf"], "name": "ADD-SP/ngx_waf", "platform": ["self-hosted"], "pushed_at": "2025-01-25T08:32:04+00:00", "repo": "ADD-SP/ngx_waf", "stars": 1631, "tags": ["waf", "nginx-module", "modsecurity", "captcha", "sql-injection", "xss", "openresty", "linux", "nginx"], "topics": ["nginx", "nginx-modules", "web-application-firewall", "waf", "modsecurity", "modsecurity-nginx", "openresty", "captcha", "hcaptcha", "recaptcha"], "urls": [], "use_cases": ["protect my nginx server from sql injection and xss attacks", "block malicious ips and user agents at the web server level", "add a waf to nginx compatible with modsecurity rules", "use owasp modsecurity core rule set with nginx", "add captcha challenges like hcaptcha or recaptcha to nginx", "allow googlebot and other search engine crawlers while blocking bots", "rate limit and auto-block ips doing challenge collapsar attacks"], "what_it_is": "ngx_waf is a high-performance Nginx firewall module written in C that provides web application firewall capabilities. It is compatible with ModSecurity rules (including the OWASP Core Rule Set) and offers IP/URL blacklists, anti-SQL-injection and anti-XSS via libinjection, CAPTCHA challenges, and friendly crawler verification.", "when_to_avoid": ["you use a web server other than nginx (e.g., Apache, Caddy, HAProxy)", "you need a full-featured standalone WAF with a management UI or centralized rule management", "you cannot compile custom nginx modules"], "when_to_choose": ["you run nginx or openresty and want an in-process, high-performance WAF without a separate reverse proxy", "you want ModSecurity/OWASP CRS rule compatibility with simpler configuration", "you need built-in CAPTCHA support and friendly crawler verification"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/ngx_waf", "repo": "ADD-SP/ngx_waf", "role": "main", "score": 24}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:14.083726+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:47:48.687611+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a749a8363a82ddf8af943107299f8b7f2cd483fafd57e2cb562a863447fb0044", "fetched_at": "2026-08-28T04:05:14.083726+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ADD-SP/ngx_waf"}, {"content_hash": "c32f6b966f60b36dd302315fa3ffc7e347f5161f30167f7ff35b9e95dc9885d6", "fetched_at": "2026-08-29T11:20:22.598686+00:00", "kind": "homepage", "missing": false, "url": "https://add-sp.github.io/ngx_waf-docs/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:14.083726+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:47:48.687611+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a749a8363a82ddf8af943107299f8b7f2cd483fafd57e2cb562a863447fb0044", "fetched_at": "2026-08-28T04:05:14.083726+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ADD-SP/ngx_waf"}, {"content_hash": "c32f6b966f60b36dd302315fa3ffc7e347f5161f30167f7ff35b9e95dc9885d6", "fetched_at": "2026-08-29T11:20:22.598686+00:00", "kind": "homepage", "missing": false, "url": "https://add-sp.github.io/ngx_waf-docs/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:47:48.687611+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a749a8363a82ddf8af943107299f8b7f2cd483fafd57e2cb562a863447fb0044", "fetched_at": "2026-08-28T04:05:14.083726+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ADD-SP/ngx_waf"}, {"content_hash": "c32f6b966f60b36dd302315fa3ffc7e347f5161f30167f7ff35b9e95dc9885d6", "fetched_at": "2026-08-29T11:20:22.598686+00:00", "kind": "homepage", "missing": false, "url": "https://add-sp.github.io/ngx_waf-docs/"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:05:14.083726+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:14.083726+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:14.083726+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:47:48.687611+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a749a8363a82ddf8af943107299f8b7f2cd483fafd57e2cb562a863447fb0044", "fetched_at": "2026-08-28T04:05:14.083726+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ADD-SP/ngx_waf"}, {"content_hash": "c32f6b966f60b36dd302315fa3ffc7e347f5161f30167f7ff35b9e95dc9885d6", "fetched_at": "2026-08-29T11:20:22.598686+00:00", "kind": "homepage", "missing": false, "url": "https://add-sp.github.io/ngx_waf-docs/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:14.083726+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:14.083726+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:47:48.687611+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a749a8363a82ddf8af943107299f8b7f2cd483fafd57e2cb562a863447fb0044", "fetched_at": "2026-08-28T04:05:14.083726+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ADD-SP/ngx_waf"}, {"content_hash": "c32f6b966f60b36dd302315fa3ffc7e347f5161f30167f7ff35b9e95dc9885d6", "fetched_at": "2026-08-29T11:20:22.598686+00:00", "kind": "homepage", "missing": false, "url": "https://add-sp.github.io/ngx_waf-docs/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:14.083726+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:14.083726+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:14.083726+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:47:48.687611+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a749a8363a82ddf8af943107299f8b7f2cd483fafd57e2cb562a863447fb0044", "fetched_at": "2026-08-28T04:05:14.083726+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ADD-SP/ngx_waf"}, {"content_hash": "c32f6b966f60b36dd302315fa3ffc7e347f5161f30167f7ff35b9e95dc9885d6", "fetched_at": "2026-08-29T11:20:22.598686+00:00", "kind": "homepage", "missing": false, "url": "https://add-sp.github.io/ngx_waf-docs/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:14.083726+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:14.083726+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:47:48.687611+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a749a8363a82ddf8af943107299f8b7f2cd483fafd57e2cb562a863447fb0044", "fetched_at": "2026-08-28T04:05:14.083726+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ADD-SP/ngx_waf"}, {"content_hash": "c32f6b966f60b36dd302315fa3ffc7e347f5161f30167f7ff35b9e95dc9885d6", "fetched_at": "2026-08-29T11:20:22.598686+00:00", "kind": "homepage", "missing": false, "url": "https://add-sp.github.io/ngx_waf-docs/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:47:48.687611+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a749a8363a82ddf8af943107299f8b7f2cd483fafd57e2cb562a863447fb0044", "fetched_at": "2026-08-28T04:05:14.083726+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ADD-SP/ngx_waf"}, {"content_hash": "c32f6b966f60b36dd302315fa3ffc7e347f5161f30167f7ff35b9e95dc9885d6", "fetched_at": "2026-08-29T11:20:22.598686+00:00", "kind": "homepage", "missing": false, "url": "https://add-sp.github.io/ngx_waf-docs/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:47:48.687611+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a749a8363a82ddf8af943107299f8b7f2cd483fafd57e2cb562a863447fb0044", "fetched_at": "2026-08-28T04:05:14.083726+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ADD-SP/ngx_waf"}, {"content_hash": "c32f6b966f60b36dd302315fa3ffc7e347f5161f30167f7ff35b9e95dc9885d6", "fetched_at": "2026-08-29T11:20:22.598686+00:00", "kind": "homepage", "missing": false, "url": "https://add-sp.github.io/ngx_waf-docs/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:47:48.687611+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a749a8363a82ddf8af943107299f8b7f2cd483fafd57e2cb562a863447fb0044", "fetched_at": "2026-08-28T04:05:14.083726+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ADD-SP/ngx_waf"}, {"content_hash": "c32f6b966f60b36dd302315fa3ffc7e347f5161f30167f7ff35b9e95dc9885d6", "fetched_at": "2026-08-29T11:20:22.598686+00:00", "kind": "homepage", "missing": false, "url": "https://add-sp.github.io/ngx_waf-docs/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 3, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2216, "days_push": 585, "days_rel": 585, "gap_med": null, "n_releases_24m": 1}, "score": 24, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}