- Move all per-module security audit reports to docs/security/ - Move code review logs to docs/reviews/, analysis reports to docs/reports/ - Add docs/INDEX.md as single entry point for all project documentation - Add documentation management conventions section to README.md - Clean up empty per-module docs/ directories
2.2 KiB
2.2 KiB
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 缺乏关键防护:
- 无发送速率限制(可被用于邮件炸弹)
- 无同邮箱 60 秒发送冷却
- 无验证码过期清理机制
- 无连续失败锁定机制
- 修复建议:
- 确认
_run.sh使用的是smtp_v2.py - 删除或重命名旧版
smtp.py防止误用 - 在代码注释中明确标记废弃
- 确认
P0-2: 依赖 pymsg 无认证(缓解:绑定 127.0.0.1)
- 说明: 与其他 pymsg 服务相同,当前依赖网络层隔离
🟠 P1 — 高危问题
| # | 问题 | 说明 |
|---|---|---|
| P1-1 | 验证码存储在进程内存,服务重启后所有未使用验证码失效 | 可被利用造成拒绝服务(频繁重启导致用户无法注册) |
| P1-2 | 全局发送熔断配置需确认生效(SMTP_HOURLY_LIMIT) |
smtp_v2 已有但需验证环境变量正确加载 |
✅ 已有安全机制(smtp_v2.py)
- ✅ 同邮箱 60 秒发送冷却: 冷却期拒绝并返回
retry_after - ✅ 邮箱级限流(gateway 层双窗口:3次/小时 + 10次/天)
- ✅ 验证码一次性消费: 校验通过立即删除,防重放
- ✅ 连续失败 5 次自动作废: 防暴力破解验证码
- ✅ 10 分钟有效期: 惰性过期清理
- ✅ 发送失败不计入冷却: 防止网络错误误限制
- ✅ 全局熔断(可选):
SMTP_HOURLY_LIMIT默认 100 封/小时 - ✅ fail-closed: SMTP 异常时验证码校验失败
修复路线图
立即(24小时)
- 确认 smtp 服务运行的是 smtp_v2.py,旧版下线
- 删除或隔离 smtp.py 防止误用
短期
- 验证全局熔断配置生效
- 验证码存储考虑持久化(可选,当前内存实现适合单实例)