# gateway 模块安全审计报告 **审计日期**: 2026-08-01 **审计范围**: `src/main.cpp`、`src/shared/`(libth、libhttp、libcrypt、libsqlite3) **代码版本**: dev_qing 分支 --- ## 修复进度 | 优先级 | 总数 | 已修复 | 待修复 | |--------|------|--------|--------| | P0 | 1 | 0 | 1 | | P1 | 5 | 部分 | 3 | | P2 | 2 | 0 | 2 | --- ## 🔴 P0 — 严重问题 ### P0-1: RSA 私钥存储在仓库中/硬编码 - **位置**: Token 签名相关代码 - **问题**: RSA 私钥若硬编码在代码中或随仓库分发: - 所有部署使用同一密钥对,私钥泄露即全局沦陷 - 任何有代码访问权限的人都可伪造 Token - **修复建议**: 1. 私钥从文件路径加载(启动参数或环境变量),不硬编码 2. 每个部署实例生成独立密钥对 3. 私钥文件权限 0600,仅服务运行用户可读 4. 公钥分发机制:dnfs、aibox 等需要验签的服务可访问公钥 --- ## 🟠 P1 — 高危问题 | # | 问题 | 说明 | |---|------|------| | P1-1 | Token 吊销机制缺失 | 当前无 Token 黑名单/吊销列表,修改密码/注销后旧 Token 仍然有效直到过期 | | P1-2 | 登录失败次数限制需确认实现 | 是否有 IP/账户级别的失败锁定 | | P1-3 | 上游代理超时配置需验证 | 反向代理超时过短导致大文件上传失败,过长导致 Slowloris | | P1-4 | C++ HTTP 解析器缓冲区溢出审计 | libhttp 库需全面 fuzz 测试 | | P1-5 | 请求体大小限制需确认 | 是否配置了合理的上限(如 10MB) | --- ## 🟡 P2 — 中危问题 | # | 问题 | |---|------| | P2-1 | 错误页面可能泄露版本号/堆栈信息 | | P2-2 | HTTPS 配置(如使用)需确认 TLS 版本和密码套件安全 | --- ## ✅ 已有安全机制 1. ✅ **PBKDF2 密码哈希**: 慢哈希算法防彩虹表,使用唯一盐值 ```cpp bool auth_ok = PBKDF2Hasher::verify_password(password, stored_hash); ``` 2. ✅ **RSA Token 签名**: Token 使用 RSA 私钥签名,防伪造 3. ✅ **反向代理架构**: 统一入口,隐藏后端服务拓扑 4. ✅ **速率限制**: 邮件轰炸多层防护(gateway+smtp 双窗口限流、60秒冷却、失败锁定) 5. ✅ **防用户名枚举**: 登录失败返回统一消息(需确认实现) 6. ✅ **WAF 前置防护**: Go WAF 处理 SQLi/XSS/CC/协议解析 7. ✅ **C++ 高性能实现**: 避免 Python GIL 瓶颈,抗并发能力强 8. ✅ **依赖审计**: 使用项目自带的 libcrypt 加密库(PBKDF2、RSA) --- ## 修复路线图 ### 立即(24小时) - [ ] 确认 RSA 私钥不从仓库/硬编码加载,改为外部文件 - [ ] 验证请求体大小限制已启用(参考 waf 的 10MB 配置) ### 短期(72小时) - [ ] 实现 Token 吊销列表(密码修改时注销旧 Token) - [ ] 确认登录失败锁定机制生效 - [ ] 验证代理超时配置(防 Slowloris + 支持大文件上传) - [ ] libhttp 解析器 fuzz 测试 ### 中期 - [ ] 错误页面脱敏 - [ ] TLS 安全配置(HTTPS 场景) - [ ] 管理操作审计日志