fix footer

This commit is contained in:
tamakyi
2026-11-02 17:17:06 +08:00
parent ea9ba3e8fc
commit c633789a92
2 changed files with 52 additions and 1 deletions
+51
View File
@@ -53,3 +53,54 @@
- `internal/route/honeypot_test.go` 的 `captureStore` 缺 3 个新方法 → 整个 route 包编译不过 - `internal/route/honeypot_test.go` 的 `captureStore` 缺 3 个新方法 → 整个 route 包编译不过
- `templates/render_test.go` 的 `mockLoggedUser` 缺 `TelegramChatID` → 3 个渲染测试失败 - `templates/render_test.go` 的 `mockLoggedUser` 缺 `TelegramChatID` → 3 个渲染测试失败
## 蜜罐邮件提醒功能审阅(用户要求,重点找 bug 与改进点)
审阅报告:`outputs/review-honeypot-mail-2026-10-30.md`。基线测试全绿(mail + route 蜜罐相关)。
### 结论分级
- **P1(应修)`autoban.alerted` 去重口径不一致**:`map[string]bool` 永不过期,且 `cleanup()`
从不清理它 → 同一 IP 的告警**一生只发一次**;而蜜罐侧 `dedup` 用 24h TTL。两条链路口径不同,
长期盯防同一来源会漏掉后续攻击活动。建议改成带时间戳的 map + cleanup 按窗口清理。
- **P2(建议修)蜜罐告警空收件人不短路**:`route/honeypot.go:alert()` 没有
`SecurityAlertEmail == ""` 前置判断(autoban 侧有 `alertEmail != ""`)。蜜罐开着但没配收件人时,
每次凭据提交都走一遍无效 SMTP 拨号 + 留 Warn 日志,与「未配置静默跳过」预期不符。
- **P2(边界)邮件明文密码**:`SendHoneypotAlertMail` 把明文 password 渲染进 HTML。代码已意识到
是敏感物。建议维持明文(功能价值=运维立刻拿到字典)+ 强化「收件人必须是个人邮箱、禁群组」的
配置警示,而非一刀切掩码。
### 审阅中确认「已做对、无需改」的点(值得记住的设计)
- 凭据**类型层面**不入库:`db.HoneypotHit` 结构体没有 Username/Password 字段,编译期保证;
明文只落 0600 按天 JSONL。
- 蜜罐独立于 `enable_auto_ban`(`RecordHoneypot` 只看 `HoneypotEnabled`)。
- 纯 GET 探测不立即封(留「GET 表单→POST 提交」的咬钩机会)。
- 精确 IP 与 /64 封禁键分离;body 只读一次先提取凭据再判封禁;`clipRunes` 按 rune 截断防非法 UTF-8。
### 三项已修(commit 036156b)
1. **P1 `autoban.alerted` 去重口径**:`map[string]bool` → `map[string]time.Time`,新增
`alertCooldown = 24h` 常量 + `alertedRecently()` 辅助 + `cleanup()` 清理过期项。
与蜜罐侧 `alertDedupTTL=24h` 对齐。新增 `TestAlertCooldownExpires`(回拨 alerted 时间戳
模拟冷却期已过,断言能再次告警)。
2. **P2 空收件人短路**:`route.go` 注入 `sendAlert` 前判 `SecurityAlertEmail` 空值,空则置 nil,
`alert()` 的 `h.sendAlert == nil` 自然短路。(autoban 侧本就有 `alertEmail != ""` 判断,无需改。)
3. **P2 明文密码警示**:`conf/static.go` 注释 + `app.sample.ini` 注释强化「蜜罐邮件含明文密码,
收件人必须个人邮箱、禁群组/分发列表」。维持明文不改掩码(功能价值=运维立刻拿到字典)。
验证:autoban/route/mail/conf 测试全绿,`go build ./...` 通过,gofmt 干净,行尾未破坏(LF)。
## 更新日志文档 + 首页间距修复
1. **更新日志**:`outputs/changelog-2026-10-30.md`,站长口吻、口语化,只写用户可感知的功能
(数据面板/Telegram 通知/找回提问/图片压缩/404 页/验证码不丢正文/私聊完整记录)。
蜜罐、备份、迁移等纯后台内容刻意不写。注意:Telegram 条目依赖生产配好 [notify] 的 bot token。
2. **生产配置答疑**:蜜罐子项全有 sanitizeHoneypot 兜底,无需补;真正要显式加的是
honeypot_cred_dir、报告配置段(report_email 留空回退 security_alert_email)、[notify] 可选段。
生产 ban_window_seconds=10 比默认 60 短,已提示用户确认是否有意。
3. **首页间距修复(ea9ba3e)**:`templates/home.html` 里 tb-grid 之后的三张独立卡片
(域名迁移/一点提醒/近期更新)彼此零间距挤成一团。修法:`.tb-grid ~ .uk-card { margin-top: 16px }`
(模板内联 <style>,不碰 base.css,无需 bump StaticVersion)。
截图验证:headless=old + file:// 预览页,亮暗两主题间距均正常。
**坑:headless Chrome 的 --screenshot 相对路径写不进**(Failed to write file),必须用绝对路径。
+1 -1
View File
@@ -3,7 +3,7 @@
<a href="/rules">{{t .LangCode "site.footer.rules"}}</a> | <a href="/rules">{{t .LangCode "site.footer.rules"}}</a> |
<a href="/stats">{{t .LangCode "site.footer.stats"}}</a> | <a href="/stats">{{t .LangCode "site.footer.stats"}}</a> |
<!--<a href="/pixel">画板</a> | --> <!--<a href="/pixel">画板</a> | -->
<a href="https://box.shiroko.one/_/tamakyi" target="_blank">{{t .LangCode "site.footer.admin"}}</a> <a href="mailto:tamabox@shiroko.one" target="_blank">{{t .LangCode "site.footer.admin"}}</a>
<br> <br>
<a href="https://share.shiroko.one" target="_blank">{{t .LangCode "site.footer.drive"}}</a> <a href="https://share.shiroko.one" target="_blank">{{t .LangCode "site.footer.drive"}}</a>
| <a href="https://blog.shiroko.one" target="_blank">{{t .LangCode "site.footer.notice"}}</a> | <a href="https://blog.shiroko.one" target="_blank">{{t .LangCode "site.footer.notice"}}</a>