docs(memory): 记录第二轮复查结论与六项修复的验证方式
- 新增 topics/quality.md:业务正确性 / 运维 / 前端体验四类结论,含 「私聊取最早 50 条」「Classic() 的 Logger 记 RequestURI」这两个坑的成因, 以及处置覆盖面、Redis 两种故障模式、产品缺口(无 page view / 提问者找不回自己的提问) - 2026-10-29.md:本轮六项修复的改动与验证结果,另记两个实现坑 (limit 兜底不该抬大用户配置;Python bytes 字面量不支持 \uXXXX) - topics/sec.md / 2026-10-27.md:补上一轮遗漏的字体自动发现与 CSP enforce 结论 - MEMORY.md:索引加 quality,处置覆盖面一条标注投票链路已补齐
This commit is contained in:
@@ -83,7 +83,11 @@ CSRF 绑 uid(无 token POST → 400);18 条 XSS 载荷全灭(含实体
|
||||
`NotoSansCJK-Regular.ttc` 是 OTTO → 就算 `ttcFirstFont()` 正确提取出子字体也仍不可用。
|
||||
`.ttc` 是字体集合,需先按 `ttcf` 魔数 → `numFonts` → 子字体偏移 → 重排 sfnt header + 表目录
|
||||
(4 字节对齐)才能交给 freetype(`route/question/ttc.go`,测试 `ttc_test.go` 自造最小 TTC)。
|
||||
生产机上要备一个 **glyf 轮廓**的 TTF(如 LXGWWenKai-Medium.ttf)放 `static/fonts/` 或配 `font_path`。
|
||||
|
||||
**2026-10-27 已收敛**:`fontCandidates()` 补 glyf 系统候选(wqy-zenhei / wqy-microhei /
|
||||
DroidSansFallbackFull / uming)且排在 Noto(CFF) 之前;`static/fonts` 同时按 CWD 与可执行文件目录找;
|
||||
`CheckShareCardFont()` 在 `runWeb` 启动时探一次(Info 打路径 / WARN 给 `apt install fonts-wqy-zenhei`)。
|
||||
本地实测该 apt 包即可零配置出图(`/share-card` 500 → 200 image/jpeg)。生产同理,别用 Noto CJK。
|
||||
|
||||
## 仍待决策/未做
|
||||
|
||||
@@ -91,7 +95,11 @@ CSRF 绑 uid(无 token POST → 400);18 条 XSS 载荷全灭(含实体
|
||||
- 匿名投票清 cookie 即换身份:只加了结果页匿名说明,未做 IP 唯一索引(会被 NAT/移动网误伤)。
|
||||
- 颜色字段只校验长度(有 Go 上下文转义兜底,非安全问题)。
|
||||
- P1-1 残余:存量内容里的外链 img 仍在库里,仅渲染层不再输出;将来若加「原样导出」入口会复发。
|
||||
- CSP 目前停在 `report`:7 个公开页面实测零违规,可以切 `enforce`,等用户拍板。
|
||||
- CSP 默认 **enforce**(2026-10-27 定):不给 `csp_report_uri` 的 report-only 等于没装,
|
||||
留个不生效的开关更容易让人误以为已防护。白名单由 `csp_sweep.py` 真浏览器巡检背书
|
||||
(18 页面 + 2 图片端点,零违规);误伤时的逃生口是 `csp = report|off` + 重启,不用改代码。
|
||||
- **Sentry CDN 是条件白名单**:`header.html` 的 Sentry 在 `{{ if ne SentryDSN "" }}` 里,
|
||||
静态 grep 和本地巡检都碰不到 → 按 `conf.App.SentryDSN` 条件放行,单测双向断言。
|
||||
|
||||
## 复现脚本怎么跑(踩过的两次假红,别再误判成回归)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user