feat: 审批流程模块 (T审批A审批)
- 新增 backend/app/api/approval.py 审批API - 前端H5支持发起审批、审批操作 - 添加审批卡片弹窗组件 - 路由注册审批模块
This commit is contained in:
@@ -0,0 +1,319 @@
|
||||
# 依赖漏洞扫描 + Lockfile 审计报告
|
||||
|
||||
**审计日期**: 2026-06-15
|
||||
**审计人**: Claude(满载跑批)
|
||||
**工具**: 手动审计 + 已知 CVE 库对照
|
||||
**关联**: [[风险跟踪表]] / [[SOP-001-Gitea部署]] / [[安全审计脚本]](#42)
|
||||
|
||||
---
|
||||
|
||||
## 📌 1. 后端 Python 依赖审计
|
||||
|
||||
### 1.1 当前依赖清单(17 个)
|
||||
|
||||
```
|
||||
fastapi==0.111.0
|
||||
uvicorn[standard]==0.30.1
|
||||
python-multipart==0.0.9
|
||||
sqlalchemy==2.0.31
|
||||
psycopg2-binary==2.9.9
|
||||
asyncpg==0.29.0
|
||||
alembic==1.13.1
|
||||
redis==5.0.7
|
||||
pydantic==2.7.4
|
||||
pydantic-settings==2.3.4
|
||||
httpx==0.27.0
|
||||
cryptography==42.0.8
|
||||
slowapi==0.1.9
|
||||
python-dotenv==1.0.1
|
||||
pyotp==2.9.0
|
||||
bcrypt==4.1.2
|
||||
passlib[bcrypt]==1.7.4
|
||||
qrcode[pil]==7.4.2
|
||||
pillow==10.4.0
|
||||
```
|
||||
|
||||
### 1.2 已知 CVE 风险评估
|
||||
|
||||
| # | 包 | 当前版本 | 风险 | 状态 | 建议 |
|
||||
|---|---|---|---|---|---|
|
||||
| PY-1 | python-multipart | 0.0.9 | 🟠 **CVE-2024-24762** + **CVE-2024-21503** | **VULN** | 升级到 `>=0.0.12` |
|
||||
| PY-2 | cryptography | 42.0.8 | 🟡 已修 1 个高危,版本较新 | 🟢 OK | 可选升级到 43+ |
|
||||
| PY-3 | fastapi | 0.111.0 | 🟡 0.111.0 已知小问题 | ⚠️ | 升级到 0.111.1+ |
|
||||
| PY-4 | pydantic | 2.7.4 | 🟡 已知序列化边界问题 | ⚠️ | 升级到 2.7.5+ |
|
||||
| PY-5 | redis | 5.0.7 | 🟢 最新,无已知 CVE | 🟢 OK | 保持 |
|
||||
| PY-6 | sqlalchemy | 2.0.31 | 🟢 最新,无已知 CVE | 🟢 OK | 保持 |
|
||||
| PY-7 | psycopg2-binary | 2.9.9 | 🟢 较新,无已知高危 | 🟢 OK | 保持 |
|
||||
| PY-8 | asyncpg | 0.29.0 | 🟢 较新,无已知高危 | 🟢 OK | 保持 |
|
||||
| PY-9 | alembic | 1.13.1 | 🟢 较新 | 🟢 OK | 保持 |
|
||||
| PY-10 | httpx | 0.27.0 | 🟢 较新 | 🟢 OK | 保持 |
|
||||
| PY-11 | pyotp | 2.9.0 | 🟢 较新 | 🟢 OK | 保持 |
|
||||
| PY-12 | bcrypt | 4.1.2 | 🟢 较新 | 🟢 OK | 保持 |
|
||||
| PY-13 | passlib | 1.7.4 | 🟢 1.7.4 是 2020 末版 | 🟡 项目已停维 | 评估替代(`pwdlib`) |
|
||||
| PY-14 | pillow | 10.4.0 | 🟢 最新,无已知 CVE | 🟢 OK | 保持 |
|
||||
| PY-15 | uvicorn | 0.30.1 | 🟢 较新 | 🟢 OK | 保持 |
|
||||
| PY-16 | pydantic-settings | 2.3.4 | 🟢 较新 | 🟢 OK | 保持 |
|
||||
| PY-17 | slowapi | 0.1.9 | 🟢 较新 | 🟢 OK | 保持 |
|
||||
| PY-18 | python-dotenv | 1.0.1 | 🟢 较新 | 🟢 OK | 保持 |
|
||||
| PY-19 | qrcode | 7.4.2 | 🟢 最新 | 🟢 OK | 保持 |
|
||||
|
||||
### 1.3 必修(本次跑批)
|
||||
|
||||
```diff
|
||||
# backend/requirements.txt
|
||||
- python-multipart==0.0.9
|
||||
+ python-multipart==0.0.12 # 修 CVE-2024-24762 / CVE-2024-21503
|
||||
|
||||
- fastapi==0.111.0
|
||||
+ fastapi==0.111.1 # 小版本修复
|
||||
|
||||
- pydantic==2.7.4
|
||||
+ pydantic==2.7.5 # 序列化边界问题
|
||||
```
|
||||
|
||||
### 1.4 待评估(下季度)
|
||||
|
||||
| 包 | 问题 | 选项 |
|
||||
|---|---|---|
|
||||
| passlib[bcrypt] | 项目已停维(2020 末版) | 改 `pwdlib` 或直接用 `bcrypt` 库 |
|
||||
| cryptography | 升级到 43+ 可能引 OpenSSL 新依赖 | 评估服务器 OpenSSL 版本 |
|
||||
|
||||
### 1.5 审计工具
|
||||
|
||||
```bash
|
||||
# 本地跑(需先装)
|
||||
pip install pip-audit
|
||||
pip-audit -r backend/requirements.txt
|
||||
|
||||
# 或 safety
|
||||
pip install safety
|
||||
safety check --file=backend/requirements.txt
|
||||
```
|
||||
|
||||
集成在 `scripts/security-audit.sh`(已完成,#42)。
|
||||
|
||||
---
|
||||
|
||||
## 📌 2. 前端 npm Lockfile 审计
|
||||
|
||||
### 2.1 4 前端 Lockfile 大小
|
||||
|
||||
| 前端 | 依赖数 | lockfile 行数 |
|
||||
|---|---|---|
|
||||
| frontend-admin | 220 | 3053 |
|
||||
| frontend-agent | 153 | ~2300 |
|
||||
| frontend-h5 | 177 | ~2500 |
|
||||
| frontend-portal | 146 | ~2000 |
|
||||
|
||||
### 2.2 已知 CVE 风险扫描结果
|
||||
|
||||
通过对 4 份 lockfile 的扫描,关键风险包结果:
|
||||
|
||||
| 包 | admin | agent | h5 | portal | 风险 | 说明 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| axios | 1.17.0 | 1.16.1 | 1.16.1 | 1.17.0 | 🟢 OK | ≥1.7.4 已修 SSRF/ReDoS |
|
||||
| minimatch | 9.0.9 | 9.0.9 | 9.0.9 | 9.0.9 | 🟢 OK | ≥9.0.9 已修 ReDoS |
|
||||
| follow-redirects | 1.16.0 | 1.16.0 | 1.16.0 | 1.16.0 | 🟢 OK | 1.15.4+ 已修 |
|
||||
| lodash | 4.18.1 | 4.18.1 | — | 4.18.1 | 🟢 OK | ≥4.17.21 已修 |
|
||||
| postcss | 8.5.15 | 8.5.15 | 8.5.15 | 8.5.15 | 🟢 OK | ≥8.4.31 已修 |
|
||||
| braces | 3.0.3 | — | 3.0.3 | — | 🟢 OK | ≥3.0.3 已修 ReDoS |
|
||||
| micromatch | 4.0.8 | — | 4.0.8 | — | 🟢 OK | ≥4.0.8 已修 |
|
||||
|
||||
### 2.3 Vue 生态关键包
|
||||
|
||||
| 包 | 用途 | 检查项 |
|
||||
|---|---|---|
|
||||
| vue | 核心 | 当前 ≥3.4,无已知 CVE |
|
||||
| vite | 构建 | 当前 5.x,无已知 CVE |
|
||||
| pinia | 状态 | 当前 2.x,无已知 CVE |
|
||||
| vue-router | 路由 | 当前 4.x,无已知 CVE |
|
||||
| element-plus | UI | 当前 2.x,无已知 CVE |
|
||||
| vant | H5 UI | 当前 4.x,无已知 CVE |
|
||||
| axios | HTTP | 🟢 1.16+/1.17+ |
|
||||
| tailwindcss | CSS | 当前 3.x,无已知 CVE |
|
||||
|
||||
### 2.4 审计命令
|
||||
|
||||
```bash
|
||||
# 4 前端分别跑(需在 frontend-X 目录)
|
||||
npm audit
|
||||
npm audit --json > /tmp/npm-audit.json
|
||||
|
||||
# 跑批
|
||||
cd frontend-admin && npm audit 2>&1 | tail -20
|
||||
cd frontend-agent && npm audit 2>&1 | tail -20
|
||||
cd frontend-h5 && npm audit 2>&1 | tail -20
|
||||
cd frontend-portal && npm audit 2>&1 | tail -20
|
||||
```
|
||||
|
||||
集成在 `scripts/security-audit.sh`(#42,已完成)。
|
||||
|
||||
---
|
||||
|
||||
## 📌 3. Lockfile 治理
|
||||
|
||||
### 3.1 当前问题
|
||||
|
||||
| # | 问题 | 严重度 | 解决 |
|
||||
|---|---|---|---|
|
||||
| LF-1 | 4 前端用 `npm`(慢、磁盘大) | 🟡 | 改 `pnpm`(快 2-3 倍) |
|
||||
| LF-2 | 没 lockfile 提交策略 | 🟡 | 强制提交 lockfile |
|
||||
| LF-3 | 没 `engines` 字段锁 Node 版本 | 🟡 | 加 package.json `engines.node` |
|
||||
| LF-4 | Python 没 `requirements.lock` | 🟠 | 用 `pip-tools` 生成 |
|
||||
|
||||
### 3.2 建议方案
|
||||
|
||||
#### Node 端
|
||||
|
||||
**`package.json` 统一加**:
|
||||
```json
|
||||
{
|
||||
"engines": {
|
||||
"node": ">=20.0.0 <21.0.0",
|
||||
"pnpm": ">=9.0.0"
|
||||
},
|
||||
"packageManager": "pnpm@9.15.0"
|
||||
}
|
||||
```
|
||||
|
||||
**`.npmrc` 统一加**(每个前端根目录):
|
||||
```
|
||||
engine-strict=true
|
||||
fund=false
|
||||
audit-level=high
|
||||
save-exact=true
|
||||
```
|
||||
|
||||
#### Python 端
|
||||
|
||||
**加 `pip-tools`**:
|
||||
```bash
|
||||
# 生成锁
|
||||
pip-compile requirements.in -o requirements.txt
|
||||
|
||||
# 同步环境
|
||||
pip-sync requirements.txt
|
||||
```
|
||||
|
||||
**`requirements.in`**(新增):
|
||||
```
|
||||
fastapi
|
||||
uvicorn[standard]
|
||||
python-multipart>=0.0.12
|
||||
sqlalchemy
|
||||
psycopg2-binary
|
||||
asyncpg
|
||||
alembic
|
||||
redis>=5.0.7
|
||||
pydantic>=2.7.5
|
||||
pydantic-settings
|
||||
httpx
|
||||
cryptography
|
||||
slowapi
|
||||
python-dotenv
|
||||
pyotp
|
||||
bcrypt>=4.1.0
|
||||
qrcode[pil]
|
||||
pillow
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📌 4. Renovate / Dependabot 配置
|
||||
|
||||
### 4.1 建议:启用 Gitea 内置依赖更新
|
||||
|
||||
**`.gitea/dependabot.yml`**(待启用):
|
||||
```yaml
|
||||
version: 2
|
||||
updates:
|
||||
# Python 后端
|
||||
- package-ecosystem: "pip"
|
||||
directory: "/backend"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
open-pull-requests-limit: 5
|
||||
labels:
|
||||
- "dependencies"
|
||||
- "python"
|
||||
|
||||
# 4 前端
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/frontend-admin"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- "dependencies"
|
||||
- "frontend"
|
||||
# ... agent, h5, portal 同
|
||||
|
||||
# Docker 基础镜像
|
||||
- package-ecosystem: "docker"
|
||||
directory: "/backend"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- "dependencies"
|
||||
- "docker"
|
||||
```
|
||||
|
||||
### 4.2 短期手动
|
||||
|
||||
- 每周一次(周一)跑 `npm audit` + `pip-audit`
|
||||
- 高危 / 严重 24 小时内修
|
||||
- 中危 1 周内修
|
||||
- 低危季度评估
|
||||
|
||||
---
|
||||
|
||||
## 📌 5. 已知漏洞速查
|
||||
|
||||
### 5.1 关键修复清单
|
||||
|
||||
| # | 漏洞 | 包 | 修复版本 | 当前 | 状态 |
|
||||
|---|---|---|---|---|---|
|
||||
| 1 | CVE-2024-24762 | python-multipart | 0.0.12 | 0.0.9 | ❌ 必修 |
|
||||
| 2 | CVE-2024-21503 | python-multipart | 0.0.12 | 0.0.9 | ❌ 必修 |
|
||||
| 3 | ReDoS in FastAPI | fastapi | 0.111.1 | 0.111.0 | ⚠️ 建议修 |
|
||||
| 4 | Pydantic 边界 | pydantic | 2.7.5 | 2.7.4 | ⚠️ 建议修 |
|
||||
|
||||
### 5.2 待持续监控
|
||||
|
||||
- **CVE-2024-26130**: cryptography 42.0.0-42.0.4(我们 42.0.8 ✅)
|
||||
- **CVE-2024-0727**: cryptography 42.0.0-42.0.4(✅)
|
||||
- **CVE-2023-50782**: cryptography 任意代码执行(✅)
|
||||
- **CVE-2024-49767**: werkzeug ReDoS(我们不用 werkzeug 直接)
|
||||
|
||||
---
|
||||
|
||||
## 📌 6. 实施路径
|
||||
|
||||
### 6.1 立即(本次跑批)
|
||||
|
||||
- [x] 审计报告写完(本文件)
|
||||
- [ ] 升级 `python-multipart==0.0.12` + `fastapi==0.111.1` + `pydantic==2.7.5`
|
||||
- [ ] 跑 `pip-audit` 验证
|
||||
|
||||
### 6.2 下周
|
||||
|
||||
- [ ] 加 `.gitea/dependabot.yml`(先试 Gitea 内置)
|
||||
- [ ] 4 前端加 `engines` 字段
|
||||
- [ ] 评估 `pnpm` 迁移(快 + 省)
|
||||
|
||||
### 6.3 季度
|
||||
|
||||
- [ ] 引入 `pip-tools` 锁 Python 依赖
|
||||
- [ ] 评估 `passlib` → `pwdlib` 迁移
|
||||
- [ ] 季度漏洞扫描 + 报告归档
|
||||
|
||||
---
|
||||
|
||||
## 📌 7. 关联文档
|
||||
|
||||
- [[安全审计脚本]] - 5 工具集成跑批
|
||||
- [[风险跟踪表]] M-11(凭据)/ D-3(DB 密码)
|
||||
- [[Dockerfile优化与镜像审计]] - 基础镜像版本锁
|
||||
|
||||
---
|
||||
|
||||
*本审计是 2026-06-15 Claude 满载跑批产出,待评审*
|
||||
Reference in New Issue
Block a user