fix(security): 会话密钥改为随机生成,修复硬编码密钥可伪造管理员会话
安全审计 P0 修复:旧版会话签名密钥硬编码在源码中(源码公开即泄露), 任何人可据此伪造 isAdmin 会话接管后台。 - config: 新增 [web].secret_key,首启/升级时用 crypto/rand 自动生成 32 字节随机密钥并持久化;旧硬编码值自动替换 - config: 支持 MAILGO_SECRET_KEY 环境变量覆盖(覆盖值不落盘) - config: 配置文件权限收紧为 0600(同时保护 relay_password 等敏感字段) - web: NewWebServer 校验密钥(空/旧默认值/短于16字节拒绝启动) - test: 伪造会话拒绝、密钥生命周期(生成/持久化/重启稳定/env不落盘)等 9 个测试 - docs: README 配置参考、security_todo.md 安全修复清单 部署注意:升级重启后所有用户需重新登录。
This commit is contained in:
@@ -82,6 +82,9 @@ attach_dir = "/srv/mail_go/attachments" # 附件存储目录
|
||||
|
||||
[web]
|
||||
addr = ":8080" # 监听地址,支持 TCP 端口或 Unix socket
|
||||
secret_key = "" # Web 会话签名密钥;留空时首次启动自动生成
|
||||
# 随机密钥并写入本文件(请妥善备份,泄露/丢失
|
||||
# 分别意味着会话可被伪造/所有登录态失效)
|
||||
|
||||
[smtp]
|
||||
addr = ":25" # SMTP 明文端口
|
||||
@@ -175,6 +178,16 @@ addr = "/run/mail_go/web.sock"
|
||||
|
||||
当 `addr` 以 `/` 开头时,Gin 自动以 Unix socket 方式监听。
|
||||
|
||||
### 3. 指定会话密钥(容器/多实例部署)
|
||||
|
||||
会话签名密钥可通过环境变量 `MAILGO_SECRET_KEY` 覆盖(优先于配置文件,且不会写入磁盘):
|
||||
|
||||
```bash
|
||||
MAILGO_SECRET_KEY="$(openssl rand -hex 32)" mail_go
|
||||
```
|
||||
|
||||
要求:长度至少 16 字节;留空时由配置文件提供(首次启动自动生成)。更换密钥后所有已登录会话立即失效,用户需重新登录。
|
||||
|
||||
Nginx 反向代理配置:
|
||||
|
||||
```nginx
|
||||
|
||||
Reference in New Issue
Block a user