目录穿越防护,以及容器里怎么还原宿主机路径
一个文件下载服务要回答两个「路径」问题:请求里那个路径不能越界,而页面上要显示的是宿主机上那个目录 —— 后者藏在 /proc/self/mountinfo 的第 4 个字段里。
阅讀全文 →
記錄開發過程中的判断與取舍,包括一次排障的完整過程、一個决定背後的理由,以及尚未解决的遗留問題。正文為圖文混排的 Markdown 文章。
一个文件下载服务要回答两个「路径」问题:请求里那个路径不能越界,而页面上要显示的是宿主机上那个目录 —— 后者藏在 /proc/self/mountinfo 的第 4 个字段里。
阅讀全文 →
覆盖与删除都要带当前 SHA,所以写操作必须串行;而 Git 不存目录这件事,得靠每一级放一个 .gitkeep 来补。
阅讀全文 →
打开 PerMonitorV2 只是拿到通知。真正的坑是框架会重复缩放:字号 10 → 5 → 2.5。解法是所有尺寸以 96 DPI 为基准做绝对重算。
阅讀全文 →
`netstat -ano` 给的 PID 可能是 0,也可能是一整棵进程树的父节点。前者要去问 netsh 的排除端口范围,后者要按进程树强杀。
阅讀全文 →
留全量样本算 P99,亿级请求内存就爆了。对数线性分桶把内存压到一个与请求量无关的常数(256KB),相对误差上限 0.1%。
阅讀全文 →
Windows 的系统定时器分辨率约 15.6ms,ticker 把吞吐死死卡在 60~90 req/s —— 设 5000 QPS 只跑出 88。改成「绝对时间表」后实测 4982。
阅讀全文 →
关掉 send 通道来通知出口,任何一次迟到的投递都会 panic —— 而投递方可能来自 Hub 也可能来自读循环,时序根本无法保证。
阅讀全文 →
同样是「uid → 连接」的一张表,一个用 sync.RWMutex 保护以支持多端在线,另一个用单 goroutine + channel 让 map 完全无锁。两种都能跑,代价不同。
阅讀全文 →
消息是异步落库的,逐条打已读标记会出现「标记先到、消息后到」的假未读。游标天然规避,代价是要处理「对方还没说过话」这一种回退。
阅讀全文 →
消息表换 UUID v7、用户表留雪花 ID,不是选型摇摆 —— 前者换掉了「多实例要协调节点号」这个运维负担,后者留在需要短主键的地方。
阅讀全文 →
筆記記錄的是當時的判断與上下文,結论可能已經過時;正文裡的圖片與連結以原始出處為准。