sjinks/node-modsecurity

GitHub: sjinks/node-modsecurity

为 Node.js 提供 ModSecurity WAF 能力的原生绑定库,让应用直接具备请求安全检测与威胁防护功能。

Stars: 5 | Forks: 1

# node-modsecurity [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/b094286f99162933.svg)](https://github.com/sjinks/node-modsecurity/actions/workflows/ci.yml) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=sjinks_node-modsecurity&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=sjinks_node-modsecurity) [![Dependency Review](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/87125661b8162935.svg)](https://github.com/sjinks/node-modsecurity/actions/workflows/dependency-review.yml) 一个用于 Node.js 的 [ModSecurity](https://github.com/SpiderLabs/ModSecurity#readme) 连接器 ## 前置条件 由于此库提供了 `libmodsecurity` 的 Node.js 绑定,因此必须安装 `libmodsecurity` 及其开发文件。 请参阅:https://pkgs.org/search/?q=libmodsecurity ### Ubuntu ``` sudo apt-get install -y libmodsecurity3 libmodsecurity-dev ``` ### CentOS ``` sudo yum -y install epel-release sudo yum -y install libmodsecurity libmodsecurity-devel ``` ### MacOS 待定 ### Windows [不支持](https://github.com/SpiderLabs/ModSecurity#windows) ### 注意事项 旧版本的 libmodsecurity 有时会有 Bug:例如,直到 3.0.8 的 libmodsecurity(至少从 3.0.6 开始)可能会[崩溃](https://github.com/SpiderLabs/ModSecurity/issues/2872) 如果您忘记调用 `Transaction::processConnection()` 或 `Transaction::processURI()`;libmodsecurity 3.0.6 存在内存泄漏。 因此,建议您自行安装(或者更有可能是构建)最新版本的 libmodsecurity。[官方文档](https://github.com/SpiderLabs/ModSecurity#compilation) 和[项目 Wiki](https://github.com/SpiderLabs/ModSecurity/wiki/Compilation-recipes-for-v3.x) 提供了有关如何编译该库的说明。 截至撰写本文时,libmodsecurity 3.0.9 似乎没问题:我的测试未发现内存泄漏,我也未能从 Node.js 使其崩溃。 ## 安装 ``` npm install modsecurity ``` ## 用法 待定;请参阅[此处](https://github.com/sjinks/node-modsecurity/blob/245049f87b276fd56c1493b37afa437d04613e72/test/integration/lifecycle.mjs#L39-L85)获取用法示例。 tl;dr: ``` import { createServer } from 'node:http'; import { ModSecurity, Rules, Transaction } from 'modsecurity'; const modsec = new ModSecurity(); // Optional: set logging callback: modsec.setLogCallback((message) => console.log(message)); const rules = new Rules(); rules.loadFromFile('rules.conf'); const server = createServer((request, response) => { const tx = new Transaction(modsec, rules); let res; res = tx.processConnection(request.socket.remoteAddr, request.socket.remotePort, request.socket.localAddress, request.socket.localPort); if (typeof res === 'object') { return processIntervention(res, response, tx); } if (false === res) { // modsecurity returned an error } res = tx.processURI(request.url, request.method, request.httpVersion); if (typeof res === 'object') { return processIntervention(res, response, tx); } let key = null; for (const v of request.rawHeaders) { if (key === null) { key = v; } else { tx.addRequestHeader(key, v); key = null; } } res = tx.processRequestHeaders(); if (typeof res === 'object') { return processIntervention(res, response, tx); } if (Buffer.isBuffer(request.body)) { res = tx.appendRequestBody(request.body); if (typeof res === 'object') { return processIntervention(res, response, tx); } } res = tx.processRequestBody(); if (typeof res === 'object') { return processIntervention(res, response, tx); } // Handle request here tx.processLogging(); }); function processIntervention(intervention, response, tx) { response.statusCode = intervention.status; if (intervention.url) { response.setHeader('Location', intervention.url); } // intervention.log contains additional information response.end(); tx.processLogging(); } server.listen(3000); ```
标签:AppImage, C++插件, GNU通用公共许可证, libmodsecurity, MITM代理, ModSecurity, NAPI, Node.js, SQL注入防护, TCP/UDP协议, WAF, Web应用防火墙, XSS防护, 中间件, 安全组件, 攻击防御, 绑定库, 网络安全, 自定义脚本, 请求过滤, 隐私保护, 黑客防御