tamakyi
11d6e701ee
fix(ops): 访问日志脱敏、优雅关闭、Redis 可降级并启动即探活
三处都属于「故障时才发现」的运维缺口,一起改。
1) 访问日志泄露凭证
flamego.Classic() 内部 Use(Logger()),而 Logger 记的是 RequestURI —— 含 query。
实测日志出现 path=/_/tblocal/4?t=SECRETTOKEN123:?t= 是私密提问钥匙,
?code= 是一次性改密凭证,?q= 是搜索词,全都会被明文落盘,凡是能看日志的人
都能直接读私密提问或重置密码。internal/tracing 早就为同一原因只取 URL.Path
并留了注释,漏的是框架自带那层。
→ 改 flamego.New() + accessLogMiddleware,只记 Method/Path/Status/Duration/IP;
静态资源成功请求不记(噪音),4xx/5xx 照记(排查裂图靠它)。
2) 没有优雅关闭
直接 ListenAndServe,Go 对 SIGTERM 是立即退出,每次部署都会把正在写库的 POST
就地处死,留下「提问已 INSERT、图片没传完」这类半成品。
→ signal.NotifyContext(SIGTERM/SIGINT) + srv.Shutdown(15s),超时才 Close;
退出前关连接池。实测 8 个并发分享图请求中发 SIGTERM,8/8 全部成功。
3) Redis 单点
session 建在 Redis 上,load 失败 flamego/session 会 panic → 每请求 500(含匿名访客);
而 cache.Cacher 没判空 Addr,go-redis 会回退 localhost:6379,于是「不配 Redis」
这种被允许的部署里找回密码整体不可用、私信邮件节流失效,且启动零提示。
→ cache 跟随开关(未配则 MemoryIniter);启动 PingRedis fail-fast,显式 2s 超时。
实测停掉 Redis 后启动立即失败并明确指出是 Redis。
验证:单测 2 项(query 永不入日志 / 静态资源过滤口径);重启日志出现
「收到退出信号」→「HTTP 服务已关闭」;启动打「Redis 连接正常」。
2026-10-29 15:53:32 +08:00
..
2026-09-10 10:56:27 +08:00
2026-09-15 11:06:09 +08:00
2026-10-29 15:53:32 +08:00
2026-10-27 12:37:40 +08:00
2026-10-27 12:37:40 +08:00
2026-10-29 15:53:22 +08:00
2026-09-10 10:56:27 +08:00
2026-10-27 12:37:40 +08:00
2026-10-27 12:37:40 +08:00
2026-10-16 09:39:30 +08:00
2026-10-23 10:53:03 +08:00
2026-10-29 15:53:32 +08:00
2026-10-23 12:58:48 +08:00
2026-10-29 15:53:32 +08:00
2026-10-25 09:27:57 +08:00
2026-10-16 09:39:30 +08:00
2026-10-27 12:37:40 +08:00
2026-10-22 16:05:37 +08:00
2026-09-10 10:56:27 +08:00