页面缓存被当成脚本执行,问题出在参数编码还是缓存目录

📅 2026-10-11 👁️ 1

页面缓存文件被当成脚本执行,不是单点问题。它是两段链路同时失守的结果:前一段让攻击内容能写进缓存,后一段让这份缓存被解释执行。只修参数编码或只修目录权限,都挡不住完整链路。

缓存键为什么会带外部输入

静态化缓存的常见做法是把请求路径映射成一个文件名,命中就直接把文件送出去。问题出现在映射时把外部参数原样拼进了键里。同行系统的一条修复记录把成因写得很具体:PbootCMS 在 V3.2.24(2026-09-01)的更新日志中写明,修复了前台分页参数编码与查询分隔符绕过导致 HTML 缓存投毒、缓存文件被当作脚本执行的问题。

这里有两类绕过。一类是编码差异:同一个值经过不同的百分号编码写法,在字符串比较时不相等,于是被当成两个不同页面,其中一个的缓存内容是可以控制的。另一类是分隔符:查询串的分隔字符没有做转义,拼进文件名后改变了路径归属,让写入落到意料之外的位置。

编码与分隔符的两类绕过

正确的处理顺序是先把参数规范化,再生成键。规范化意味着按同一套规则解码、拒绝非法字符,最后用一个稳定的散列值当文件名,而不是把用户输入直接当路径片段。这样即使输入形式多变,指向的仍是同一个键,也不可能出现「同键不同页」或者把分隔符当目录分隔符的情况。

「同键不同页」的麻烦不止于命中率:缓存内容与请求路径的对应关系一旦被打破,展示的就不再是那个路径本该有的内容,投毒才能持久留在页面上。

落盘位置与执行权限

第二段问题在文件层。缓存目录如果被 Web 服务器按脚本处理,任何写进该目录的文件都会获得执行能力。收口方式是把写入目录与可执行目录分离:缓存只作为数据被程序读取,不通过 URL 直接寻址;目录层面关闭脚本解析,必要时再单独设一条拒绝规则。

这一步和内容层的防护是两条线。站内的敏感词过滤与内容审核作用于入库文本,防的是文本层面的问题内容;接口鉴权与注入防护走的是请求处理链。文件层的执行问题三者都挡不住,必须在部署与目录权限这一层解决。

站内的四段收口

按链路排一遍会更清楚。第一段是路由与伪静态规则:改写后的路径决定缓存键的输入,规则改动后要重新核对键的生成方式,避免把改写参数直接拼进去。第二段是键的生成:规范化输入、拒绝非法字符、使用不可预测的文件名。第三段是写入:只写数据目录,校验目标路径仍在预期范围内。第四段是执行:缓存路径不接受脚本解析,且这条限制写在部署配置里而不是靠约定。

排查时也按这四段倒序看:先确认目录是否还能被执行,再确认写入路径是否可被外部控制,再确认键生成有没有规范化,最后回看规则改动记录。

常见问题

问:只清缓存能解决问题吗? 不能。清掉的是已有的投毒内容,生成与执行这两段条件还在,之后仍会重新出现。

问:改了权限为什么还能被触发? 如果缓存键仍可被外部控制,改写页面内容这条路径依然有效,只是不再直接执行而已。

问:静态化本身要不要停? 不必整体停。要改的是键的生成方式与落盘位置,让静态化不再依赖可预测的文件名和可执行的目录。

相关文章

富文本编辑器从外链抓图时为什么要拦内网地址和超大文件

编辑器的远程抓图是服务端发起的请求,能访问到浏览器访问不到的内网地址,因此必须拦内网目标、设连接超时与大小上限,并防域名二次解析指向内网。站内内容采集功能面临同一组收口。

2026-10-11

后台的用户资料编辑接口不做字段白名单,会被改到什么程度

用户资料编辑接口若把请求里的字段直接写进对象,最坏情况不是改掉一个昵称,而是改掉身份与状态类字段。同类问题在同行系统的修复记录中被明确处理过,收口方法是限定可改字段并按分组权限复核。

2026-10-11

AI 爬虫是单独放行还是统一拒绝,判断依据该看哪几项

AI 类爬虫单独放行还是统一拒绝,判断依据不在爬虫名称,而在这三点:抓取意图是索引还是训练、站点能否被识别为来源、被抓之后有没有回报。排除文件只表达意愿不保证执行,配置要按这三项分场景定。

2026-10-11

有论文说生成式引擎优化动的是引擎的证据池和生成环节,内容站能配合什么

一篇立场论文把生成式引擎优化的对象描述为引擎的证据池与生成环节,而不是页面排位。站端能配合的不是去猜算法,而是让来源可辨识、让内容质量有据可查,并避开那篇论文点名的三类做法。

2026-10-11

内容系统的大版本一季一个,变更清单里哪几类值得细看

大版本前的候选版本往往已积累上百项改动,细读变更清单要按安全修复、接口变化、编辑器与文案四类拆。四类各自的判断标准不同,决定升级紧迫度的通常只有第一类。

2026-10-11

插件生态越大暴露面越宽,主机端能收的三道在哪

面对 WordPress 这类插件众多建站系统爆出的高危远程代码执行告警,主机端能收的三道是升级窗口、能力暴露面与登录凭证。升级窗口要和备份恢复配合,全站级操作默认关闭按需开启,凭证轮换与改密码一起排。

2026-10-11

生成式引擎引用的来源里混进了AI生成的内容,站点怎么自证是原始出处

一份对四家生成式搜索的审计发现,被引来源里有一部分是 AI 生成内容。内容站要让自己被当成原始出处,站端能配合的是两段:一是来源可辨识,让模型读得懂站点在讲什么、内容从哪来;二是站内留质量证据,用敏感词过滤与内容审核保证发出的内容本身干净可核。

2026-10-11

实验报告写的可见度提升四成,做生成式优化时该怎么读这个数

提出 GEO 的论文里那个「提升可达四成」的数,是在自建的大规模基准 GEO-bench、特定实验设置下测得的上限,作者同时指出各策略的效果随领域不同而差别明显。读这类结论要看域差异与实验设置,而不是当成承诺值;站端能稳定做的是收录、站点说明和后台能力清单覆盖这些可控项。

2026-10-11