docs: 各模块安全审计报告 + 补充 .gitignore 忽略规则
This commit is contained in:
1 parent
12ece9020c
commit
cebef9fe70
15 files changed
+1467
-297
No files matched your search
@@ -0,0 +1,67 @@
|
||||
# smtp 模块安全审计报告
|
||||
|
||||
**审计日期**: 2026-08-01
|
||||
**审计范围**: `smtp.py`(旧版)、`smtp_v2.py`(新版)
|
||||
**代码版本**: dev_qing 分支
|
||||
|
||||
---
|
||||
|
||||
## 修复进度
|
||||
|
||||
| 优先级 | 总数 | 已修复 | 待修复 |
|
||||
|--------|------|--------|--------|
|
||||
| P0 | 2 | 1(v2已修复) | 1(旧版需下线) |
|
||||
| P1 | 2 | 部分 | 1 |
|
||||
|
||||
---
|
||||
|
||||
## 🔴 P0 — 严重问题
|
||||
|
||||
### P0-1: 旧版 smtp.py 存在大量致命漏洞(需立即下线)
|
||||
- **位置**: `smtp.py`
|
||||
- **问题**: 旧版 smtp.py 缺乏关键防护:
|
||||
1. 无发送速率限制(可被用于邮件炸弹)
|
||||
2. 无同邮箱 60 秒发送冷却
|
||||
3. 无验证码过期清理机制
|
||||
4. 无连续失败锁定机制
|
||||
- **修复建议**:
|
||||
1. **确认 `_run.sh` 使用的是 `smtp_v2.py`**
|
||||
2. 删除或重命名旧版 `smtp.py` 防止误用
|
||||
3. 在代码注释中明确标记废弃
|
||||
|
||||
### P0-2: 依赖 pymsg 无认证(缓解:绑定 127.0.0.1)
|
||||
- **说明**: 与其他 pymsg 服务相同,当前依赖网络层隔离
|
||||
|
||||
---
|
||||
|
||||
## 🟠 P1 — 高危问题
|
||||
|
||||
| # | 问题 | 说明 |
|
||||
|---|------|------|
|
||||
| P1-1 | 验证码存储在进程内存,服务重启后所有未使用验证码失效 | 可被利用造成拒绝服务(频繁重启导致用户无法注册) |
|
||||
| P1-2 | 全局发送熔断配置需确认生效(`SMTP_HOURLY_LIMIT`) | smtp_v2 已有但需验证环境变量正确加载 |
|
||||
|
||||
---
|
||||
|
||||
## ✅ 已有安全机制(smtp_v2.py)
|
||||
|
||||
1. ✅ **同邮箱 60 秒发送冷却**: 冷却期拒绝并返回 `retry_after`
|
||||
2. ✅ **邮箱级限流**(gateway 层双窗口:3次/小时 + 10次/天)
|
||||
3. ✅ **验证码一次性消费**: 校验通过立即删除,防重放
|
||||
4. ✅ **连续失败 5 次自动作废**: 防暴力破解验证码
|
||||
5. ✅ **10 分钟有效期**: 惰性过期清理
|
||||
6. ✅ **发送失败不计入冷却**: 防止网络错误误限制
|
||||
7. ✅ **全局熔断(可选)**: `SMTP_HOURLY_LIMIT` 默认 100 封/小时
|
||||
8. ✅ **fail-closed**: SMTP 异常时验证码校验失败
|
||||
|
||||
---
|
||||
|
||||
## 修复路线图
|
||||
|
||||
### 立即(24小时)
|
||||
- [ ] 确认 smtp 服务运行的是 smtp_v2.py,旧版下线
|
||||
- [ ] 删除或隔离 smtp.py 防止误用
|
||||
|
||||
### 短期
|
||||
- [ ] 验证全局熔断配置生效
|
||||
- [ ] 验证码存储考虑持久化(可选,当前内存实现适合单实例)
|
||||
Reference in new issue
Block a user