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-10-21 12:09:28 +08:00
2026-09-10 18:04:19 +08:00
2026-10-21 12:09:28 +08:00

狼的提问箱

匿名提问箱 / Anonymous Question Box

基于原版NekoBox做了一些微小的修改。主要体现在:

  • 率先引入二维码访问,同时增加更多自定义可行性,方便自行创作。
  • 添加探索页面,允许用户自行选择添加标签并展示,为陌生人提问创造可能。
  • 稍微调整了屏蔽词策略。

截图

QRcode

QRCode

Commit with picture

CWP

Explorer

explore_setting

explore

安装

需求

  • Go (v1.19 或更高版本)
  • MySQL (v5.7 或更高版本)
  • Redis (v6.0 或更高版本)

从源码编译

git clone https://github.com/tamakyi/TamaBox.git

cd TamaBox

go build -o TamaBox

编辑配置文件

cp conf/app.sample.ini conf/app.ini

运行

./TamaBox web

架构

Architecture Architecture

NekoBox 使用 GitHub Actions 进行持续集成和部署。

当用户访问 NekoBox 时,请求将会被发送至阿里云 CDN,CDN 的访问日志将会被实时推送到阿里云日志服务 (SLS)。日志数据将在 SLS 中存储 180 天,用于审计。

用户的信息、提问和回答将被存储在 MySQL 数据库中。

用户的会话、CSRF 令牌和电子邮件验证令牌将被暂时存储在 Redis 中。

用户的整个请求和响应链路将被上传到 Uptrace 用于调试。这些数据将被储存 30 天。管理员可以使用用户提供的 TraceID 来追踪查询指定的请求。

当用户提交提问时,问题的内容将被发送到七牛文本审查服务进行审查。如果提问内容存在问题,该内容将被发送到阿里云文本审查服务进行二次审查。 如果内容审查仍未通过,该提问将被拒绝发送。这是由于七牛文本审查服务不是很准确,一些非冒犯性的内容可能被七牛文本审查误报。

当用户收到新的提问时,阿里云邮件服务(DM)会向用户的邮箱发送一封邮件。

你可以在主页查看 NekoBox 的更新日志,也欢迎访问赞助页面来打钱支持 NekoBox。 更新日志和赞助商名单存储在独立部署的 Pocketbase 服务中。

开源协议

MIT License

备注

  • 基于原版Nekobox修改,基本与原版无异,主要是添加了个人主页二维码和首页统计数,并修改了部分适合自己的参数。
S
Description
No description provided
Readme MIT
41 MiB
Languages
Go 66.5%
HTML 26.6%
Python 4.3%
CSS 1.4%
Shell 1.1%