AikidoSec/firewall-node
GitHub: AikidoSec/firewall-node
Zen 是一款面向 Node.js 应用的嵌入式运行时防火墙,通过数据流追踪技术在应用内部自动拦截 SQL 注入、SSRF 等各类 Web 攻击。
Stars: 165 | Forks: 40

# Zen,Node.js 应用内防火墙 | 由 Aikido 提供
[](https://www.npmjs.com/package/@aikidosec/firewall)
[](https://app.codecov.io/gh/aikidosec/firewall-node)
[](https://github.com/AikidoSec/firewall-node/blob/main/LICENSE)
[](http://makeapullrequest.com)
[](https://github.com/AikidoSec/firewall-node/actions/workflows/unit-test.yml)
[](https://github.com/AikidoSec/firewall-node/actions/workflows/end-to-end-tests.yml)
Zen,您的应用内防火墙,在运行时为您带来安心。
由 Aikido 提供的 Zen 是一款嵌入式 Web 应用防火墙,能够自动保护 Node.js 应用免受常见和关键攻击的侵害。
它通过扫描用户输入以及这些数据最终流向的位置来保护您的 Node.js 应用,从而让 Zen 能够更精准地拦截 SQL 注入、路径遍历攻击等。它与您的 Node.js 应用运行在同一台服务器上,因此[安装](#installation)简单且无需维护。
## 功能
Zen 将自动保护您的 Node.js 应用免受以下攻击:
- 🛡️ [NoSQL 注入攻击](https://www.aikido.dev/blog/web-application-security-vulnerabilities)
- 🛡️ [SQL 注入攻击](https://www.aikido.dev/blog/the-state-of-sql-injections)
- 🛡️ [命令注入攻击](https://www.aikido.dev/blog/command-injection-in-2024-unpacked)
- 🛡️ [原型污染](./docs/prototype-pollution.md)
- 🛡️ [路径遍历攻击](https://owasp.org/www-community/attacks/Path_Traversal)
- 🛡️ [服务器端请求伪造 (SSRF)](./docs/ssrf.md)
- 🛡️ [攻击波检测](https://help.aikido.dev/zen-firewall/zen-features/attack-wave-protection)
- 🛡️ JS 注入
- 🛡️ [IDOR 攻击](./docs/idor-protection.md)(可选,请参阅设置指南)
Zen 与您的 Node.js 应用运行在同一台服务器上,通过以下方式自主运行:
- ✅ 像传统 Web 应用防火墙 (WAF) 一样保护您的应用,但无需任何基础设施或成本。
- ✅ 自动生成 API 规范
- ✅ 拦截已知的威胁行为者和机器人。
- ✅ 地理围栏,用于拦截或允许选定的国家/地区
- ✅ 按 IP 或用户对特定 API 端点进行速率限制
- ✅ 允许您手动拦截特定用户
## 支持的库和框架
适用于 Node.js 16+ 的 Zen 兼容以下内容:
### Web 框架
- ✅ [Express](docs/express.md) 4.x, 5.x
- ✅ [Hono](docs/hono.md) 4.x
- ✅ [hapi](docs/hapi.md) 21.x
- ✅ [micro](docs/micro.md) 10.x
- ✅ [Next.js](docs/next.md) 12.x, 13.x 和 14.x
- ✅ [Fastify](docs/fastify.md) 4.x 和 5.x
- ✅ [Koa](docs/koa.md) 3.x 和 2.x
- ✅ [NestJS](docs/nestjs.md) 10.x 和 11.x
- ✅ [Restify](docs/restify.md) 11.x, 10.x, 9.x 和 8.x
### 数据库驱动
- ✅ [`mongodb`](https://www.npmjs.com/package/mongodb) 4.x, 5.x, 6.x 和 7.x _(npm 包版本,而非 MongoDB 服务器版本)_
- ✅ [`mongoose`](https://www.npmjs.com/package/mongoose) 8.x, 7.x 和 6.x
- ✅ [`pg`](https://www.npmjs.com/package/pg) 8.x 和 7.x
- ✅ [`mysql`](https://www.npmjs.com/package/mysql) 2.x
- ✅ [`mysql2`](https://www.npmjs.com/package/mysql2) 3.x
- ✅ [`mariadb`](https://www.npmjs.com/package/mariadb) 3.x(3.5+ 版本需要 ESM 插桩)
- ✅ [`sqlite3`](https://www.npmjs.com/package/sqlite3) 6.x 和 5.x
- ✅ [`node:sqlite`](https://nodejs.org/api/sqlite.html)
- ✅ [`better-sqlite3`](https://www.npmjs.com/package/better-sqlite3) 12.x, 11.x, 10.x, 9.x 和 8.x
- ✅ [`postgres`](https://www.npmjs.com/package/postgres) 3.x
- ✅ [`@clickhouse/client`](https://www.npmjs.com/package/@clickhouse/client) 1.x
- ✅ [`@prisma/client`](https://www.npmjs.com/package/@prisma/client) 5.x
### 云服务提供商
- ✅ [`@google-cloud/functions-framework`](https://www.npmjs.com/package/@google-cloud/functions-framework) 5.x, 4.x 和 3.x
- ✅ [`@google-cloud/pubsub`](https://www.npmjs.com/package/@google-cloud/pubsub) 5.x, 4.x
- ✅ Google Cloud Functions
- ✅ AWS Lambda
### ORM 和查询构建器
有关支持的数据库驱动,请参阅上面的列表。
- ✅ [`sequelize`](https://www.npmjs.com/package/sequelize)
- ✅ [`knex`](https://www.npmjs.com/package/knex)
- ✅ [`typeorm`](https://www.npmjs.com/package/typeorm)
- ✅ [`bookshelf`](https://www.npmjs.com/package/bookshelf)
- ✅ [`drizzle-orm`](https://www.npmjs.com/package/drizzle-orm)
- ✅ [`kysely`](https://www.npmjs.com/package/kysely)
### API 工具
- ✅ [`graphql`](https://www.npmjs.com/package/graphql) 15.x, 16.x
### 数据序列化工具
- ✅ [`xml2js`](https://www.npmjs.com/package/xml2js) 0.6.x, 0.5.x, ^0.4.18
- ✅ [`fast-xml-parser`](https://www.npmjs.com/package/fast-xml-parser) 5.x, 4.x
- ✅ [`xml-js`](https://www.npmjs.com/package/xml-js) 1.x
### Shell 工具
- ✅ [`ShellJS`](https://www.npmjs.com/package/shelljs) 0.9.x, 0.8.x, 0.7.x
### 路由器
- ✅ [`@koa/router`](https://www.npmjs.com/package/@koa/router) 14.x, 13.x, 12.x, 11.x 和 10.x
### AI SDK
Zen 对以下 AI SDK 进行插桩,以跟踪使用了哪些模型以及消耗了多少 token,从而让您监控 AI 的使用情况和成本:
- ✅ [`openai`](https://www.npmjs.com/package/openai) 6.x, 5.x, 4.x
- ✅ [`@mistralai/mistralai`](https://www.npmjs.com/package/@mistralai/mistralai) 1.x
- ✅ [`@anthropic-ai/sdk`](https://www.npmjs.com/package/@anthropic-ai/sdk) ^0.40.x
- ✅ [`@aws-sdk/client-bedrock-runtime`](https://www.npmjs.com/package/@aws-sdk/client-bedrock-runtime) 3.x
- ✅ [`ai`](https://www.npmjs.com/package/ai) 6.x, 5.x, 4.x
- ✅ [`@google/genai`](https://www.npmjs.com/package/@google/genai) ^1.6.0
_注意:Zen 目前不涵盖提示词注入攻击。_
## 安装说明
我们建议在部署到生产环境之前,先在本地或 staging 环境中测试 Zen。
```
# --save-exact 确保你不会自动安装更新版本
$ npm install --save-exact @aikidosec/firewall
# --exact 确保你不会自动安装更新版本
$ yarn add --exact @aikidosec/firewall
```
如需特定框架和提供商的说明,请查看我们的文档:
- [Express](docs/express.md)
- [Fastify](docs/fastify.md)
- [Hapi](docs/hapi.md)
- [Koa](docs/koa.md)
- [Hono](docs/hono.md)
- [NestJS](docs/nestjs.md)
- [micro](docs/micro.md)
- [Next.js](docs/next.md)
- [Restify](docs/restify.md)
- [AWS Lambda](docs/lambda.md)
- [Google Cloud Functions](docs/cloud-functions.md)
- [Google Cloud Pub/Sub](docs/pubsub.md)
## 指南
- [故障排除](docs/troubleshooting.md) — 常见问题以及如何调试 Zen
- [ESM 支持](docs/esm.md) — 针对原生 ECMAScript 模块应用的设置
- [打包工具](docs/bundler.md) — 在 esbuild 和其他打包工具中使用 Zen
- [代理 / IP 标头](docs/proxy.md) — 配置负载均衡器后的客户端 IP 检测
- [设置当前用户](docs/user.md) — 识别用户以进行速率限制、拦截和攻击报告
- [IDOR 保护](docs/idor-protection.md) — 防止多租户应用中的数据泄露
## 向您的 Aikido Security 仪表板报告
Zen 通过在生产环境中提供安全性来增强 Aikido 的服务。将 API 规范的自动生成与我们的 API 扫描服务结合使用,以获得更佳的 API 安全性。
只有必要的数据才会报告回 Aikido,我们在本地扫描您的请求,并且仅每 10 分钟报告一次数据。
如果检测到针对您的应用的攻击,我们会立即报告,以便您迅速采取行动。
您可以在我们的仪表板内精心策划的列表中轻松选择要拦截的 IP 地址和/或机器人。
您将需要一个 Aikido 账户和一个 token 才能向 Aikido 报告事件。如果您没有账户,可以[免费注册](https://app.aikido.dev/login)。(无需信用卡)
方法如下:
- [登录您的 Aikido 账户](https://app.aikido.dev/login)。
- 前往 [Zen](https://app.aikido.dev/runtime/services)。
- 前往 apps。
- 点击 **Add app**。
- 为您的应用选择一个名称。
- 点击 **Generate token**。
- 复制该 token。
- 使用 [dotenv](https://github.com/motdotla/dotenv) 或您选择的其他方法,将该 token 设置为环境变量 `AIKIDO_TOKEN`。
## 在生产(拦截)模式下运行
默认情况下,Zen 仅检测并向 Aikido 报告攻击。
要拦截请求,请将环境变量 `AIKIDO_BLOCK` 设置为 `true`。
请参阅[向 Aikido 报告](#reporting-to-your-aikido-security-dashboard)以了解如何向 Aikido 发送事件。
## 其他配置
[使用环境变量配置 Zen,以进行身份验证、模式设置、调试等。](https://help.aikido.dev/doc/configuration-via-env-vars/docrSItUkeR9)
## 许可证
本程序在商业许可和 AGPL 许可下提供。
通过购买商业许可,您可以免除 AGPL 许可的要求。
一旦您在不公开自己应用源代码的情况下开发涉及 Zen 软件的商业活动,则必须购买此类许可。
如需更多信息,请通过以下地址联系 Aikido Security:support@aikido.dev 或在 https://app.aikido.dev 创建一个账户。
## 基准测试
我们在每次提交时都会运行基准测试,以确保 Zen 对您的应用性能影响最小。
请参阅[基准测试](benchmarks)
## 漏洞赏金计划
我们的漏洞赏金计划是公开的,所有注册的 Intigriti 用户都可以在以下地址找到:https://app.intigriti.com/researcher/programs/aikido/aikidoruntime
## 行为准则
请参阅 [CODE_OF_CONDUCT.md](.github/CODE_OF_CONDUCT.md) 以了解更多信息。
## 安全
请参阅 [SECURITY.md](.github/SECURITY.md) 以了解更多信息。
标签:Aikido, AppImage, CISA项目, DevSecOps, MITM代理, Node.js安全, NoSQL注入, OpenCanary, RASP, SQL注入防护, WAF, Web应用防火墙, 上游代理, 中间件, 代码安全, 原型污染防护, 后端安全, 命令注入, 密码管理, 开源安全工具, 测试用例, 漏洞枚举, 漏洞防护, 网络安全, 网络安全审计, 自动化攻击, 自动防御, 路径遍历防护, 运行时防护, 逆向工程平台, 隐私保护