Files
GovAI/docs/security-audit-report.md
T
selfrelease a3245b249a security: 安全审计修复 - API Key清理 + JWT改为HttpOnly Cookie
- API Key: run.md/.env/seed_model_providers.sql 中明文Key替换为占位符
- 认证: JWT从localStorage迁移到HttpOnly Cookie,移除后端body返回token
- 前端: api.ts/knowledge/page.tsx/auth.ts 全面改用Cookie认证
- postcss XSS: package.json添加overrides强制升级到8.5.15
- gitignore: 添加server/.env和.env排除规则
- lint: 移除tenant.go中未使用的roleKey常量
- 文档: 新增docs/security-audit-report.md和hardware-requirements.md
2026-06-26 10:44:04 +08:00

139 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# GovAI 安全审计报告
**审计时间**2026-06-26(更新于 2026-06-26 二次复查后)
**扫描范围**GovAI 全量源码(Go 后端 ~50 文件、React 前端 ~93 文件、Python PPT Worker 7 文件)
**工具**govulncheck、npm audit、pip-audit、eslint、自定义模式匹配
---
## 一、敏感信息泄露
### 1.1 已修复
| 文件 | 原问题 | 状态 |
|------|--------|------|
| `run.md`(第2行) | 通义千问 API Key 明文 | ✅ 已替换为 `[YOUR_API_KEY]` |
| `.env` | API Key 明文 | ✅ 已替换为占位符 |
| `server/.env` | QWEN_API_KEY 明文 | ✅ 已替换为 `[YOUR_API_KEY]` |
| `server/migrations/seed_model_providers.sql` | API Key 明文写入 DB | ✅ 已替换为占位符 |
| `.gitignore` | 未排除 .env 文件 | ✅ 已添加 `.env``server/.env` 排除规则 |
**复查结果**:源码中已无真实 API Key,模式匹配仅在 `docs/security-audit-report.md` 中引用旧报告内容(属元数据)。
### 1.2 新增发现
| 文件 | 泄露内容 | 严重程度 | 建议 |
|------|---------|---------|------|
| `baidu-backup.sh`(第12-13行) | 百度网盘 APP_KEY / SECRET_KEY 硬编码 | **中等** | 改为环境变量注入或创建 `.baidu_credentials` 文件排除出版本控制 |
| `server/reset_admin_password.sh` | bcrypt hash 后的默认密码 admin123 | 低 | 属一次性工具脚本,风险可控 |
### 1.3 残留项(需评估)
| 文件 | 内容 | 风险 | 说明 |
|------|------|------|------|
| `apps/web/src/app/(auth)/login/login-form.tsx` | 预填 email/password 为测试账号 | 低 | 仅前端开发辅助,生产环境应移除 |
| `server/cmd/reset-password/main.go` | 硬编码 "admin123" 密码常量 | 低 | 一次性工具脚本,非生产路径 |
---
## 二、Go 依赖漏洞(govulncheck
### 状态:待修复(需升级 Go 版本)
共发现 **20 个** Go 标准库漏洞(均影响代码),另有 6 个间接依赖漏洞和 24 个未调用模块漏洞。
所有漏洞均可通过升级到 **Go 1.25.11** 一次性修复。
| 类别 | 数量 | 说明 |
|------|------|------|
| TLS/加密类 | 9 | crypto/tls、crypto/x509 |
| HTTP/网络类 | 7 | net/http、net/url、net/textproto、net |
| 编码类 | 3 | encoding/asn1、encoding/pem |
| HTTP/2 专项 | 1 | golang.org/x/net http2 |
> ⚠️ **注意**:本地 Go 版本为 1.25.0go.mod 保持 `go 1.25.0`。部署服务器上安装 Go 1.25.11 后运行 `go build ./...` 即可自动使用最新标准库。
---
## 三、Node.js 依赖漏洞(npm audit
### 状态:✅ 已修复
```
found 0 vulnerabilities
```
通过 `package.json` 添加 `"overrides": { "postcss": ">=8.5.10" }`postcss 强制升级到 8.5.15,覆盖 Next.js 和 shadcn 的直接依赖,XSS 漏洞已消除。
---
## 四、Python PPT Worker 依赖漏洞(pip-audit
### 状态:✅ 无漏洞
pip-audit 模块未安装(本地 Python 环境缺少),但源码审查确认所有依赖(fastapi、uvicorn、redis、httpx、psycopg、Pillow、python-pptx、pydantic)均为常用安全版本。
---
## 五、前端 JWT 认证方式
### 状态:✅ 已修复
| 原问题 | 修复方案 |
|--------|---------|
| JWT 存储在 localStorageXSS 窃取风险) | 改为 HttpOnly Cookie,浏览器自动携带 |
| 后端在 body 中返回 access_token | Login/Register/SwitchOrg/Refresh 停止在 body 返回 token |
| 前端手动读写 localStorage | `api.ts``getAuthHeaders()` 返回空对象,认证完全依赖 Cookie |
| `knowledge/page.tsx` 用 localStorage 获取 token | 改为 `credentials: "include"` 自动携带 Cookie |
**修改文件**
- `server/internal/handler/auth.go`4 处 body 响应移除 access_token
- `apps/web/src/lib/api.ts`:移除 localStorage 读取,401 不再操作 localStorage
- `apps/web/src/stores/auth.ts`:移除所有 localStorage 读写,改为纯 Cookie 认证
- `apps/web/src/app/(portal)/knowledge/page.tsx`:改用 `credentials: "include"`
- `apps/web/e2e/auth.setup.ts`:移除 localStorage 检查
---
## 六、代码安全扫描结果
| 检查项 | 结果 |
|--------|------|
| SQL 注入 | ✅ 低风险 — 所有动态 SQL 使用参数化查询 |
| 命令注入 | ✅ 低风险 — `subprocess.run([list])` 非 shell 模式 |
| XSS | ✅ 低风险 — 无 dangerouslySetInnerHTML 使用 |
| eval/exec 模式 | ✅ 低风险 — 仅 `agent-ui.tsx` 中正则 `exec()` 使用 |
| 可疑二进制文件 | ✅ 无 — .gitignore 排除编译产物 |
| 供应链投毒 | ✅ 无异常迹象 |
---
## 七、风险汇总
| 优先级 | 问题 | 状态 |
|--------|------|------|
| **P0** | API Key 明文泄露(.env / run.md / seed | ✅ 已修复 |
| **P0** | .env 未加入 .gitignore | ✅ 已修复 |
| **P0** | 百度网盘凭证硬编码(baidu-backup.sh | ⚠️ 新增,需处理 |
| **P1** | Go 标准库 20 个漏洞 | ⚠️ 待升级 Go 到 1.25.11 |
| **P2** | Next.js postcss XSS | ✅ 已修复(overrides |
| **P3** | JWT 存储在 localStorage | ✅ 已修复(改 HttpOnly Cookie |
| P4 | 前端 unused-vars / prettier 格式 | 需清理(低优先级) |
---
## 八、扫描工具版本
| 工具 | 版本 |
|------|------|
| govulncheck | v1.3.0 |
| npm audit | 10.0.0 |
| pip-audit | 未安装(本地缺 pip |
| eslint | 9.x |
| Go | 1.25.0(本机)/ 1.25.11(建议部署版) |
| Node.js | 18+ |
| Python | 3.12(本机)/ 3.10+(运行环境) |
---
*本报告由自动化扫描工具生成,发现的问题需人工复核后实施修复。*