kevin
|
f2a6203714
|
fix(security): 管理端输入校验/密码最小长度/明文认证限制,修复封禁计数丢失更新
安全审计 #23/#24/#25/#27(security_todo.md P3):
- #23 用户名/域名格式校验:用户名白名单 ^[a-zA-Z0-9._-]{1,64}$
(杜绝含 @ 用户名导致的 GetByEmail 解析歧义),域名按标签校验
(字母/数字/连字符、标签 ≤63、总长 ≤253,允许单标签内部域名);
CreateUser/UpdateUser/CreateDomain 接入,新增 renderUserFormError
共用错误渲染
- #24 密码最小长度 8 位:统一 minPasswordLength,接入自助修改、
管理员创建、管理员重置三处,新增中/英/日 i18n 文案
- #25 POP3/IMAP 明文认证限制:配置了 TLS 且来源非回环时必须先
STLS/STARTTLS 再认证;新增 store.IsLoopbackIP 与
[imap]/[pop3] allow_insecure_auth 配置项(默认 false 强制)。
顺带修复存量缺陷:POP3S 隐式 TLS 端口 tlsActive 恒为 false
(原仅 STLS 命令置位),连接中心注册的 TLS 标记同步修正。
部署注意:默认行为收紧,内网明文老客户端需改用 TLS 或显式
配置 allow_insecure_auth = true
- #27 IncrementFail 并发首建窗口丢失更新:冲突 INSERT 由
DoNothing 改为 fail_count 自增,TestIncrementFailConcurrent
在 -race -count=5 下从偶发失败变为稳定通过
- 新增 17 项单测(校验矩阵/handler 拒绝放行路径/settings 密码/
POP3 明文拒绝与放行/回环判定)
- security_todo.md 勾选 #23/#24/#25/#27;登记存量备注:4 个
cache=shared 测试在 -count>1 下非幂等(UNIQUE 冲突,与 CI
默认单轮跑法无关)
|
2026-08-28 15:09:55 +08:00 |
|
kevin
|
d2b3caa81f
|
fix(quota): 入站投递强制附件配额,删除路径清理附件并回退配额
安全审计 #19/#20(security_todo.md P1):
- 新增 store.PurgeMessages 共享清理入口:删附件文件、回退配额、
删附件记录、删邮件记录,Web/IMAP/POP3 三条删除路径同源
- IMAP EXPUNGE(含 UID 分支)与 POP3 expungeDeleted 接入,修复
协议删除只删记录导致的"幽灵配额"与附件文件泄漏
- Web purgeMessages 改为委托同一入口,消除三处重复实现
- SMTP 入站投递前按收件人原子预扣附件配额(TryReserveQuota),
任一收件人超限整封拒收并返回 452 临时失败(避免 go-smtp 将
普通 error 映射为 554 永久失败);Sent 副本尽力而为不回滚整封
- saveMessage 返回实际落库字节数,reconcileQuota 对账退还差额
(覆盖收件人被删/落库失败/部分附件失败)
- NewIMAPServer/NewPOP3Server 注入 AttachmentStorage
- 新增 4 项单测(配额拒收/正常记账/对账回退/POP3 删除清理)
- security_todo.md 勾选 #19/#20,登记存量发现 #27(IncrementFail
并发首建窗口丢失更新,待决策)
|
2026-08-28 13:59:50 +08:00 |
|
kevin
|
6a9dcd0285
|
feat(imap): 多客户端状态实时同步 + 当前连接「断开并封禁」
- 推送扩展:IMAP STORE(已读/星标/\Deleted)推送 FETCH 标志更新、
EXPUNGE 推送 ExpungeUpdate(删除前序号)、APPEND/COPY/MOVE 推送
新邮件;POP3 QUIT 删除、Web 标已读/删除同样实时同步到 IMAP 客户端
- Pusher 接口统一 SMTP/POP3/Web 的推送入口,IMAP 内部操作经会话
通道直接入队(非阻塞,满则丢弃)
- 当前连接页新增「断开并封禁」:connhub 支持断开回调,SMTP/POP3
关底层连接、IMAP 经 ForEachConn 按地址断开;一键封禁 180 天并
断开该 IP 全部在线连接,黑名单页可随时解封
- 修复:POP3 PASS 成功后保留完整邮箱(此前被裸用户名覆盖)
- 新增测试:断开/按 IP 断开、flags/expunge 推送内容、POP3 删除推送、
Web 断开封禁处理器;全量 -race 通过
|
2026-08-19 19:56:04 +08:00 |
|
kevin
|
353bfa88f2
|
feat: 新增 SMTP/IMAP/POP3 协议调用日志(含攻击分析筛选)
- 每个连接记录一条日志:协议、端口、来源 IP、用户名、成功/失败、
失败原因(密码错误/IP封禁/中继被拒/发件人伪造/未认证发信等)、
操作摘要、消息数与会话时长
- 管理后台新增「协议日志」页:按协议/状态/IP/用户名/时间筛选,
今日与历史成功/失败统计卡片,分页查看,可手动清理
- 后台每 6 小时自动清理超出 protocol_log_keep_days(默认30天)
的日志;新增 [web] protocol_log_keep_days 配置项
- 修复 POP3 认证既有 bug:handleUSER 丢弃邮箱域名导致 PASS 永远失败
- 新增 store 单测、SMTP/POP3 端到端测试与模板渲染测试
|
2026-08-19 18:49:29 +08:00 |
|