控制项复核 · 2026 年 7 月 28 日

邮箱保留控制审计

“到期”和“已经删除”不是同一个事件。本审计逐项对应当前应用与 SMTP 配置,避免隐私说明把“停止访问并进入清理”误写成毫秒级即时抹除。

当前代码与仓库默认值

控制项数值含义
邮箱会话窗口1 小时 (3600s)地址可使用到服务端 expiresAt,界面倒计时展示当前值。
默认延长次数1 次每次成功延长会增加一个邮箱窗口;生产环境可覆盖该值。
会话记录缓冲期600 秒 (600s)Redis 会话和地址映射在访问到期后短暂保留,以便安全清理陈旧状态。
SMTP 原始正文 TTL1 小时 (3600s)仓库中的 SMTP 配置用该 SETEX 时长保存 Redis 邮件正文。
SQL 清理锁60 秒 (60s)新会话请求可以触发清理,Redis 锁用于限制并发扫描。

按执行顺序排列的生命周期

1. 创建会话

API 使用密码学随机数创建 16 字节会话 ID 和默认 8 位十六进制前缀。ID 写入 HttpOnly、SameSite=Strict Cookie,生产环境再加 Secure。Redis 会话与地址映射保留到界面到期时间加一段清理缓冲。

2. 收信与可见性

SMTP 进程把路由元数据写入 SQL,并可按配置 TTL 把原始正文放入 Redis。收件箱 API 要求匹配的会话 Cookie,拒绝过期会话,只返回最近一个配置窗口内的邮件。延长地址会延长会话,但不会延长早先邮件的年龄。

3. 延长

若配置允许,expiresAt 向后增加一个邮箱窗口。本次审计修正了 Redis TTL 的计算:映射现在会保留到延长后的到期时间加缓冲,不再错误地按固定单窗口提前消失。

4. 到期

超过 expiresAt 后,API 停止返回收件邮件,并在下一次相关请求时清除浏览器 Cookie。到期是访问控制边界,不代表每条 SQL 记录和基础设施日志在同一毫秒被删除。

5. 清理或手动删除

创建新邮箱时可获取一分钟 Redis 锁,删除早于一个邮箱窗口的 SQL 邮件记录。用户也可以更早删除指定记录。Redis 原始正文按 SMTP SETEX 独立到期;有限基础设施日志则受服务商、安全、稳定和法律保留需求约束。

本次复核确认的控制项

  • 会话 Cookie 使用 HttpOnly、SameSite=Strict、路径 /,生产环境启用 Secure。
  • 过期会话无法通过收件列表过程读取邮件。
  • 收件箱查询要求会话收件地址与邮件记录匹配。
  • 会话和地址键使用会过期的 Redis 记录,不是永久键。
  • 手动删除邮件在服务端执行数据库删除。
  • 首页和邮件阅读界面没有 AdSense 组件,不会把私人邮件与广告并列。

本审计不能证明什么

  • 没有查看生产 Redis、SQL、托管、备份或日志控制台。
  • 环境变量可以改变邮箱窗口和延长次数;访客当前会话以实时倒计时为准。
  • 删除 TmpKit 副本无法撤回发件人、网络中间方、已下载设备或其他备份周期中的副本。
  • 运营层仍需抽样核对生产 TTL 和清理遥测,但不得暴露邮件内容。