a3245b249a
- 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
139 lines
5.4 KiB
Markdown
139 lines
5.4 KiB
Markdown
# 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.0,go.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 存储在 localStorage(XSS 窃取风险) | 改为 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+(运行环境) |
|
||
|
||
---
|
||
|
||
*本报告由自动化扫描工具生成,发现的问题需人工复核后实施修复。* |