架构说明¶
整体架构¶
Website Defender 设计为配合 Nginx 的 auth_request 模块使用。它作为一个独立的认证服务,在 Nginx 转发请求到您的实际应用之前验证用户身份。
graph LR
User[用户/浏览器] --> Nginx
Nginx -->|1. 检查权限| Defender[Website Defender]
Defender -->|2. 允许/拒绝| Nginx
Nginx -->|3. 转发请求| App[内部应用]
工作流程:
- 用户发起请求到 Nginx
- Nginx 通过
auth_request指令向 Website Defender 发起子请求 - Defender 执行完整的认证和安全检查,返回允许或拒绝
- 如果认证通过,Nginx 将原始请求转发到内部应用;否则返回拒绝响应
关于 auth_request
auth_request 是 Nginx 的一个标准模块,允许 Nginx 在处理请求之前,先向外部认证服务发起子请求。Defender 利用此机制实现透明的认证代理,无需修改内部应用代码。
中间件链¶
请求到达 Defender 后,按以下顺序依次通过中间件处理:
graph LR
A[安全响应头] --> B[CORS]
B --> C[请求体限制]
C --> D[访问日志]
D --> E[地域封锁]
E --> F[WAF]
F --> G[速率限制]
G --> H[路由处理]
| 顺序 | 中间件 | 说明 |
|---|---|---|
| 1 | 安全响应头 | 自动附加安全头(X-Content-Type-Options、X-XSS-Protection 等) |
| 2 | CORS | 跨域资源共享策略 |
| 3 | 请求体限制 | 限制请求体大小(默认 10MB) |
| 4 | 访问日志 | 记录所有请求信息(IP、方法、路径、状态码等) |
| 5 | 地域封锁 | 基于 GeoIP 按国家/地区封锁请求 |
| 6 | WAF | Web 应用防火墙,检测 SQL 注入、XSS、路径穿越等攻击 |
| 7 | 速率限制 | 全局限速与登录限速 |
| 8 | 路由处理 | 执行具体的业务逻辑 |
认证流程¶
当请求到达 /auth 端点时,Defender 按以下顺序执行认证检查:
graph TD
A[收到请求] --> B{IP 黑名单?}
B -->|命中| C[拒绝 403]
B -->|未命中| D{IP 白名单?}
D -->|命中| E[允许通过]
D -->|未命中| F{JWT 令牌?}
F -->|有效| G{作用域检查}
G -->|通过| E
G -->|不匹配| C
F -->|无效/缺失| H{Git Token?}
H -->|有效| I{作用域检查}
I -->|通过| E
I -->|不匹配| C
H -->|无效/缺失| J{许可证令牌?}
J -->|有效| E
J -->|无效/缺失| C
认证验证流程(简化表示):
认证优先级
- IP 黑名单优先级最高,命中即拒绝
- IP 白名单命中后直接放行,跳过后续所有认证
- 多种令牌认证按顺序尝试,任一通过即放行
- 管理员用户始终跳过域名作用域检查