降低 WAF 中的误报:将 OWASP 规则与 AI 上下文相结合
Source: Dev.to

问题
并非所有 API 请求的权重相同。
- 产品目录服务每秒处理 数万请求,且无法容忍 100 毫秒的延迟。
- 高度敏感的管理面板每秒处理 ≈10 请求,并且可以容忍该延迟。
大多数 Web 应用防火墙(WAF)——ModSecurity、Cloudflare、Fastly——在整个应用中使用 单一默认规则集。虽然它们支持自定义规则,但 在没有大量手动配置的情况下无法提供每条路由的安全配置文件。
速度 vs. 准确性
- 基于规则的 WAF 能在微秒级检测 SQL‑i/XSS 攻击,但由于缺乏上下文,会产生大量 误报。
- 基于大语言模型的安全 能理解上下文,但会为每个请求增加 不可接受的延迟。
解决方案: 一种 混合 方法,将确定性模式匹配与概率性 AI 相结合。
Argus – 混合开源 WAF (Go)
Argus 结合:
- Coraza(兼容 OWASP 的规则引擎)用于快速模式匹配。
- Gemini LLM 用于上下文分析。
它提供 三种风险配置文件,让开发者可以为每条路由选择合适的延迟与上下文平衡。
核心挑战
- 我们如何在不强制二选一的情况下融合速度和上下文感知?
- 当外部依赖失效时,WAF 的降级表现如何?
- 如何在生产环境中实现无痛的采纳?
合并速度与上下文
确定性的基于正则表达式的规则捕获大多数攻击。加入 AI 上下文可消除合法请求看起来可疑的误报(例如,提到 DELETE TABLE 的教程)。
由于每个端点的延迟和安全预算不同,Argus 允许开发者 为每条路由选择模式,而不是全局设置。
解决方案:三种模式
| 模式 | 行为 |
|---|---|
| Latency First | Coraza 决定 allow / block;不涉及 AI。 |
| Paranoid | 每个请求在 Coraza 检查后由 Gemini 进行验证。 |
| Smart Shield | 仅当 Coraza 阻止请求时,才运行 Gemini 以消除误报。 |
每个请求的 Gemini 判决都会记录到数据库中,以供管理员后续分析。

弹性:AI 失效时会怎样?
Argus 依赖 Gemini 的 API 来提供 Smart Shield 和 Paranoid 模式。如果 Google 的服务出现中断:
- OWASP 规则仍然会拦截明显的威胁(SQL 注入、XSS 等)。
- AI 层会直接失效,但核心防护仍然有效。
断路器
一个 三状态断路器 确保优雅降级:
| 状态 | 条件 | 操作 |
|---|---|---|
| 关闭(正常) | Gemini 响应 | 请求通过所选模式流转。 |
| 打开 | 连续 3 次 Gemini 失败 | 保持打开 30 s;所有模式仅回退到 Coraza。 |
| 半开 | 30 s 超时后 | 向 Gemini 发送单个测试请求。 • 成功 → 关闭 • 失败 → 打开,再持续 30 s |

Drop‑in Adoption in Production
Argus hides its internal complexity behind two simple integration paths.
1. Go SDK
For native Go applications, Argus is a middleware that wraps your http.Handler.
package main
import (
"net/http"
"time"
"github.com/priyansh-dimri/argus"
)
func main() {
waf, _ := argus.NewWAF()
client := argus.NewClient(
"https://argus-5qai.onrender.com",
"api-key",
20*time.Second,
)
cfg := argus.Config{
Mode: argus.SmartShield, // or argus.LatencyFirst / argus.Paranoid
}
shield := argus.NewMiddleware(client, waf, cfg)
http.Handle("/api/", shield.Protect(yourHandler))
http.ListenAndServe(":8080", nil)
}
2. Docker Sidecar
For services written in Node, Python, Ruby, PHP, etc., run Argus as a lightweight sidecar reverse proxy. No code changes are required.
docker run -d \
--name argus-sidecar \
-p 8000:8000 \
-e TARGET_URL=http://host.docker.internal:3000 \
-e ARGUS_API_KEY=api-key \
-e ARGUS_API_URL=https://argus-5qai.onrender.com/ \
ghcr.io/priyansh-dimri/argus-sidecar:latest
All traffic is routed through the sidecar before reaching your application.
优化热点路径
因为中间件位于每个请求的关键路径上,性能至关重要。Argus:
- 缓存 适当情况下的最新 Gemini 响应。
- 最小化 Coraza 路径中的内存分配。
- 使用无锁原子操作 运行断路器逻辑。
这些优化将额外的延迟保持在对延迟敏感的服务容忍范围内,同时仍提供 LLM 的上下文安全网。
祝开发愉快!
During development we focused on optimizing the hot path, achieving:
- **262 µs** processing time for clean requests.
- **151 ns** overhead for the circuit breaker (atomic state checks instead of mutexes).
- **56 %** parallel efficiency when scaling up to 4 cores.
You can check out the source code and contribute at
[github.com/priyansh-dimri/argus/](https://github.com/priyansh-dimri/argus/).