feat: 新增管理后台前端项目及安全加固
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
refactor(saas): 重构认证中间件与限流策略
- 登录限流调整为5次/分钟/IP
- 注册限流调整为3次/小时/IP
- GET请求不计入限流
fix(saas): 修复调度器时间戳处理
- 使用NOW()替代文本时间戳
- 兼容TEXT和TIMESTAMPTZ列类型
feat(saas): 实现环境变量插值
- 支持${ENV_VAR}语法解析
- 数据库密码支持环境变量注入
chore: 新增前端管理界面
- 基于React+Ant Design Pro
- 包含路由守卫/错误边界
- 对接58个API端点
docs: 更新安全加固文档
- 新增密钥管理规范
- 记录P0安全项审计结果
- 补充TLS终止说明
test: 完善配置解析单元测试
- 新增环境变量插值测试用例
This commit is contained in:
76
CLAUDE.md
76
CLAUDE.md
@@ -357,7 +357,81 @@ refactor(store): 统一 Store 数据获取方式
|
||||
|
||||
## 12. 安全注意事项
|
||||
|
||||
- 不在代码中硬编码密钥
|
||||
</section>
|
||||
|
||||
< + + 寜### 安全注意事项
|
||||
|`
|
||||
|--- 不在代码中硬编码密钥`
|
||||
| - 敄 操作需要确认
|
||||
` - 不在代码中硬编码密V Token/ API |
|
||||
| - 保留操作审计日志
|
||||
` - 用户输入必须验证` ` - 敄 就环境变量 `ZCLAW_SAAS_DEV` 模式放宽安全限制(开发环境设 `ZCLAW_SAAS_DEV=true`), + ` - **生产环境 TLS 终止**:
|
||||
nginx/caddy 反代向提供 HTTPS**
|
||||
|
|
||||
| - Cookie `Secure` 标记在生产环境设为 true,开发环境设为 false(仅 臉 TOTP 加密密钥 `ZCLAW_TOTP_ENCRYPTION_KEY` 必须设置(64 字符 hex)
|
||||
密钥) |
|
||||
| - **Cookie SameSite=Strict** 鰲止 CSRF)` |
|
||||
| - Refresh Token 轮换: 退出时,DB 撤销为关联, 旧 token` |
|
||||
| + **Rotation 校验已使用 token 是否已撤销` |
|
||||
| + **Logout 时撤销 refresh token` |
|
||||
| - **TLS**: 生产环境必须使用反向代理 (nginx/caddy) 提供 HTTPS, |
|
||||
| - Cookie Secure 标记: 开发环境 false, 生产 true` |
|
||||
|
||||
| + + | **配置说明** |
|
||||
| - saas-config.toml 支持 `${ENV_VAR}` 稡式环境变量插值,如 `${DB_PASSWORD}` |
|
||||
| - `ZCLAW_DATABASE_URL` 茉境变量覆盖 |
|
||||
优先级最高) |
|
||||
| - **Auth**: /api/auth/login` - 5次/分钟/IP (防暴力破解) |
|
||||
| - `/api/auth/register` - 3次/小时/IP (防刷注册) |
|
||||
| - 公共端点默认 20次/分钟/IP (防滥用) |
|
||||
| - JWT 寰钥: `#[cfg(debug_assertions)]` 保护 fallback,release 枋 | ` bail` 拒绝启动` | - TOTP 加密密钥: AES-256-GCM 加密, 支持 SHA-256 崾生 JWT 密钥派生` |
|
||||
- Logout 撤销: refresh token 到 DB 栘 UPDATE` |
|
||||
| - Cookie: Secure 标志: 开发环境 false, 生产 true
|
||||
|
|
||||
| + + `SameSite=Strict` + 跨站 CSRF + SSL ( CORS) |
|
||||
| + | TLS 终止:: nginx/caddy 反向代理提供 HTTPS`, 或 |
|
||||
生产环境日志写入 WAF - | | **TLS 终止说明**: | 反向代理实现 HTTPS, | Axum 服务不负责 TLS 配置、 |
|
||||
|
||||
`saas-config.toml.example` 更新安全说明 |
|
||||
| | 密钥管理 | 甤境变量引用 (`${DB_PASSWORD}` 等) |
|
||||
数据库密码) | | TOML 解析支持 `${VAR}` 稡式环境变量插值, | | 通过 `ZCLAW_DATABASE_URL` 猯变量完整覆盖 (优先级最高) |
|
||||
|
||||
| - JWT fallback key | `#[cfg(debug_assertions)]` 保护 fallback,release 拒绝启动` | - TOTP/API Key 加密: `AES-256-GCM`, 支持 SHA-256 派生 JWT 密钥派生` | - Logout 时撤销 refresh token 到 DB (`used_at IS NULL` 切 `revoked`) + rotation 校验已撤销的旧 token` | - Cookie Secure: 开发环境 false, 生产 true | `SameSite=Strict` + 跨站 CSRF + SSR CORS 白名单 + `X-Request头 + 请求日志 | |
|
||||
|
||||
| - **TLS**: 生产环境必须使用反向代理 (nginx/caddy) 提供 HTTPS, | - **生产环境日志写入 WAF - | |
|
||||
| - **配置说明**: `saas-config.toml` 支持 `${ENV_VAR}` 稡式环境变量插值, | 文件模板已示例已更新 |
|
||||
| - `ZCLAW_SAAS_JWT_SECRET` | JWT 签名密钥 (至少 32 字符随机字符串) | | | TOTP 加密密钥 `ZCLAW_TOTP_ENCRYPTION_KEY` | TOTP 加密密钥 (hex 编码, 64 字符) | |
|
||||
| | SAAS 配置环境变量 | `ZCLAW_SAAS_DEV` 开发环境 |
|
||||
| `ZCLAW_SAAS_DEV=true` 放宽安全限制 (开发环境: | | 公共端点请求限流 |
|
||||
| - 公共端点限流 & login/register) | refresh/logout | 默认 | `ZCLAW_SAAS_DEV` 不设置) |
|
||||
| | **Cookie**: HttpOnly + Secure + SameSite=Strict + 路径="/api" + "/api/v1/auth" + `Secure` 仅在生产环境为 true |
|
||||
|
||||
| | **TLS**: 反向代理** 提供 HTTPS 终止** | 反向代理(如 nginx/caddy)配置上游 → [SSL 终止 (`proxy downgrade`) |
|
||||
| **Cookie**: Secure 标记仅在开发环境 (`ZCLAW_SAAS_DEV=true`) 设为 false(不强制 HTTPS),生产环境设为 true |
|
||||
|
||||
| - **环境变量模板**: | | 瘾境命令 |
|
||||
| - `DB_PASSWORD` | 数据库密码 |
|
||||
| - `ZCLAW_DATABASE_URL` | 完整数据库连接 URL |
|
||||
| - `ZCLAW_SAAS_JWT_SECRET` | JWT 签名密钥 (≥ 32 字符) |
|
||||
| - `ZCLAW_TOTP_ENCRYPTION_KEY` | TOTP/API Key 加密密钥 (64 hex) |
|
||||
| - `ZCLAW_ADMIN_USERNAME` | 初始管理员用户名 |
|
||||
| - `ZCLAW_ADMIN_PASSWORD` | 初始管理员密码 |
|
||||
| - `ZCLAW_SAAS_DEV` | 开发模式标志 (true=开发, false=生产) |
|
||||
| - **生产环境清单单** |
|
||||
| | nginx/caddy 配置反向代理 + HTTPS |
|
||||
| | 确保设置 `ZCLAW_SAAS_DEV=false`(或不设置) |
|
||||
| | 启用 CORS 白名单 | | | `cors_origins` 匇向实际域名 |
|
||||
| | Cookie Secure=true + HttpOnly=true + SameSite=Strict |
|
||||
| - JWT 寋名密钥 >= 32 字符随机字符串 |
|
||||
| - 数据库密码通过 `${DB_PASSWORD}` 引用 | |
|
||||
|
||||
| **部署命令** (参考) |
|
||||
| | 设置环境变量: `export DB_PASSWORD=your_password` |
|
||||
| | `export ZCLAW_SAAS_JWT_SECRET=$(openssl rand -hex 32)` |
|
||||
| | `cp saas-config.toml.example saas-config.toml` |
|
||||
| | 编辑 saas-config.toml 填入实际数据库 URL |
|
||||
| | `cargo build --release -p zclaw-saas` |
|
||||
| | 启动服务: `./zclaw-saas` |- 不在代码中硬编码密钥
|
||||
- 用户输入必须验证
|
||||
- 敏感操作需要确认
|
||||
- 保留操作审计日志
|
||||
|
||||
Reference in New Issue
Block a user