踩坑共21篇
安全扫描器:五个「扫了但没扫到」的坑,和一个实测确认的路径逃逸-知集

安全扫描器:五个「扫了但没扫到」的坑,和一个实测确认的路径逃逸

摘要:「扫一遍站点里的 PHP 文件,看看有没有马」—— 需求一句话,实现也不长:遍历目录、读文件、跑几条正则、列个表。但一个能用的安全扫描器和一段能跑的循环之间,差着五个坑,而它们的共...
lixiansen的头像-知集lixiansen12天前
0526
WebP 自动转换:三个「上传成功、图片没变」的静默失效-知集

WebP 自动转换:三个「上传成功、图片没变」的静默失效

str_replace 路径映射在 CDN/协议不一致时静默失效、能力判定漏了 gd_info、大图不设上限导致上传 500、失败无痕、删原图开关。附零依赖交付代码与 185 项离线单测。
lixiansen的头像-知集lixiansen12天前
0416
维护模式:五个「看起来在工作、其实开了后门」的写法-知集

维护模式:五个「看起来在工作、其实开了后门」的写法

X-Forwarded-For 伪造、放行集合漏判、开关读反、200 而非 503,以及'缓存比维护层更早命中'。附零依赖交付代码与 145 项离线单测。
lixiansen的头像-知集lixiansen12天前
0458
友链申请表单:一次越权写入,和一处「写了但不发」的死角-知集

友链申请表单:一次越权写入,和一处「写了但不发」的死角

「友链申请」是每个站都要做的功能:前台表单(游客可填)→ 后台审核 → 通过后写进链接管理器 + 邮件通知。需求很直白,但写对要处理四类互不相同的问题 —— 其中一个是安全漏洞:审批动作只...
lixiansen的头像-知集lixiansen12天前
04211
文章系列卡片:一个 PHP 8 致命错误,和三处「不报错但白干」的写法-知集

文章系列卡片:一个 PHP 8 致命错误,和三处「不报错但白干」的写法

给文章加「系列连载」导航,核心就三步:注册分类法、查同系列文章、在正文里插卡片。但一份「能跑」的实现里通常埋着五个坑,而且五个都不报错:一个平时完全正常、某天突然整页 500(PHP 8 把...
lixiansen的头像-知集lixiansen12天前
0226
「历史上的今天」为什么永远是空的:三个不报错的死写法,与两个时区坑-知集

「历史上的今天」为什么永远是空的:三个不报错的死写法,与两个时区坑

一个小到几百行就能写完的功能,我先写了三版,三版都不报错、页面都能打开,只是没效果:in_the_loop() 是恒假的守卫、先取 N 条再过滤让 limit 被吃掉、每次浏览都多查一次库。修完之后,又被...
lixiansen的头像-知集lixiansen12天前
03814
页面缓存一次都没命中:六个静默失效,与一条 nonce 结构性保证-知集

页面缓存一次都没命中:六个静默失效,与一条 nonce 结构性保证

整页缓存是'一份 HTML 发给所有人',它的失效几乎全是静默的 —— 不报错、页面能开,只是没生效,或者更糟:生效了但内容是错的。本文记录六个静默失效(transient 自杀、0 字节文件、404 被缓...
lixiansen的头像-知集lixiansen12天前
03914
看板娘不拖慢首屏:六个脚本的串行注入,与三重触发时机-知集

看板娘不拖慢首屏:六个脚本的串行注入,与三重触发时机

Live2D 看板娘要加载 6 个脚本加模型贴图,直接挂 head 会拖慢首屏。本文讲清两件事:为什么这 6 个脚本必须串行(并行会得到「本地复现不了、线上偶发」的顺序 bug),以及怎么用「事件 + 定时...
lixiansen的头像-知集lixiansen15天前
0319
秘技、限时、自动:三种勋章获取方式,一条授勋通道-知集

秘技、限时、自动:三种勋章获取方式,一条授勋通道

三枚成就勋章,三种完全不同的获取方式:秘技(Konami Code)、限时三选一认领、深夜自动授予。交互形态差很远,后端却是同一条通道。本文讲透三种模型各自最容易做错的一处:判定为什么必须在...
lixiansen的头像-知集lixiansen15天前
0407
「我填了 1 天,它却按 7 天算」:文章过期提示的四个边界-知集

「我填了 1 天,它却按 7 天算」:文章过期提示的四个边界

文章过期提示不到 100 行,但有四个边界决定它是好用还是添乱:后台填 1 天代码按 7 天算、颜色值原样拼进 style 属性、提示条跑进 RSS 与编辑预览、以及「刚好满 N 天」算不算过期。文末附零依...
lixiansen的头像-知集lixiansen15天前
0375