AikidoSec/firewall-java
GitHub: AikidoSec/firewall-java
为 Java 应用提供内嵌运行时防火墙,防止常见 Web 攻击并简化运维。
Stars: 122 | Forks: 5

# Zen,面向 Java 的应用内防火墙 | 由 Aikido 出品
[](https://app.codecov.io/gh/aikidosec/firewall-java)
[](http://makeapullrequest.com)
[](https://github.com/AikidoSec/firewall-java/actions/workflows/gradle-tests.yml)
[](https://github.com/AikidoSec/firewall-java/actions/workflows/end2end.yml)
Zen,让你安心的应用内防火墙——在 runtime 中运行。
Zen 是一款内嵌式 Web Application Firewall,可自动保护您的 Java 应用免受常见且关键的攻击。
Zen 通过拦截包含危险字符串的用户输入来保护您的 Java 应用,从而防止 SQL injection。它与您的 Java 应用运行在同一台服务器上,安装简便且零维护。
Zen for Java 目前支持 Java 17 及以上版本。我们支持 Java、Kotlin 和 Groovy。
## 功能
Zen 将从内部自动保护您的 Java 应用免受以下攻击:
* 🛡️ [NoSQL injection 攻击](https://www.aikido.dev/blog/web-application-security-vulnerabilities)
* 🛡️ [SQL injection 攻击](https://www.aikido.dev/blog/the-state-of-sql-injections)
* 🛡️ [命令注入攻击](https://www.aikido.dev/blog/command-injection-in-2024-unpacked)
* 🛡️ [路径遍历攻击](https://owasp.org/www-community/attacks/Path_Traversal) *此支持目前仅限于 Path/Paths 和 new File(String)*
* 🛡️ [服务器端请求伪造 (SSRF)](./docs/ssrf.md)
* 🛡️ [攻击波检测](https://help.aikido.dev/zen-firewall/zen-features/attack-wave-protection)
Zen 在与您的 Java 应用相同的服务器上自主运行,以便:
* ✅ 像传统的 web application firewall (WAF) 一样保护您的应用,但不需要任何基础设施或成本。
* ✅ 按 IP 或用户对特定的 API endpoint 进行速率限制
* ✅ 允许您手动封禁特定用户
* ✅ 自动生成 API 规范
## 支持的库和框架
### Web 框架
#### Java
* ✅ [`Spring MVC`](docs/spring.md) 3.x
* ✅ [`Javalin`](docs/javalin.md) 6.x
* 🚧 [`Spring Webflux`](docs/spring_webflux.md) 3.x
#### Kotlin
* ✅ [`Spring MVC`](docs/spring.md) 3.x
* ✅ [`Javalin`](docs/javalin.md) 6.x
* 🚧 [`Spring Webflux`](docs/spring_webflux.md) 3.x
* 🚧 `Ktor`
#### Groovy
* ✅ [`Spring MVC`](docs/spring.md) 3.x
* 🚧 [`Spring Webflux`](docs/spring_webflux.md) 3.x
#### 🚧 Scala
* 🚧 `Akka`
### 数据库驱动
* ✅ [`MariaDB Java Client`](https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client)
* ✅ [`Microsoft JDBC Driver For SQL Server`](https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc)
* ✅ [`MySQL Connector/J`](https://mvnrepository.com/artifact/com.mysql/mysql-connector-j)
* ✅ [`PostgreSQL JDBC Driver`](https://mvnrepository.com/artifact/org.postgresql/postgresql)
* ✅ [`HyperSQL JDBC Driver`](https://mvnrepository.com/artifact/org.hsqldb/hsqldb)
* ✅ `SQLite JDBC Drivers`
### API 工具
* ✅ [`OkHttp`](https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp) (*不涵盖 SSRF 重定向*)
* ✅ [`Apache HttpClient`](https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient) (*不涵盖 SSRF 重定向*)
## 安装
您可以[在此](https://github.com/AikidoSec/firewall-java/releases/latest)下载 zip 文件来安装 Zen,并将其解压到您选择的目录中,
这里我们以 Linux 系统为例,将其解压到了 `/opt/zen`。我们也支持 Windows 和 Mac OS X。
请确保您没有更改此文件夹的结构,并且进程对其具有读写权限。
要激活 Zen,您只需在 Java 命令中的 `-jar` 参数**之前**添加以下 `-javaagent`
```
java -javaagent:/opt/zen/agent.jar -jar build/myapp.jar
```
将 `/opt/zen` 替换为您选择的目录。
要使用用户封禁和/或速率限制功能,您需要将以下 Jarfile 包含到您的 repository 中
### Gradle
将以下代码添加到您的 `build.gradle` 文件中。
```
dependencies {
# ...
implementation files('/opt/zen/agent_api.jar')
# ...
}
```
### Maven
将以下代码添加到您的 `pom.xml` 文件中。
```
dev.aikido
agent_api
1.0
/opt/zen/agent_api.jar
```
如需进一步设置,请继续查看您选择的 Web 框架([点击此处查看 Spring](./docs/spring.md))
## 报告至您的 Aikido Security 仪表板
Zen 是 Aikido 推出的一款新产品。专为帮助开发者提升安全水平而构建。当 Aikido 进行扫描时,使用 Zen 即可获得全天候的保护。
当然,您可以在没有 Aikido 的情况下使用 Zen 的某些功能。只需几行代码即可获得安心。
但是,将数据报告给 Aikido 将为您带来最大的价值。
您需要一个 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。
* 将该 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)
## License
本程序在商业许可和 AGPL 许可下提供。
您可以通过购买商业许可来免除 AGPL 许可的要求。
一旦您在未公开自己应用源代码的情况下,
开展涉及 Zen 软件的商业活动,
就必须购买此类许可。
了解更多信息,请通过以下地址联系 Aikido Security:
support@aikido.dev 或在 https://app.aikido.dev 创建账户。
## 行为准则
请参阅 [CODE_OF_CONDUCT.md](.github/CODE_OF_CONDUCT.md) 了解更多信息。
## 安全
我们的漏洞赏金计划是公开的,所有注册的 Intigriti 用户均可在以下地址找到:https://app.intigriti.com/researcher/programs/aikido/aikidoruntime
请参阅 [SECURITY.md](.github/SECURITY.md) 了解更多信息。
标签:CISA项目, Java, RASP, Web安全, 域名枚举, 应用防火墙, 漏洞防御, 蓝队分析