CDN 下如何验证升级暂存目录已阻断
源站加了拒绝规则,并不等于公网上就打不开。在带 CDN 的站点上,wp-content/upgrade/ 是否可达,由边缘缓存、边缘规则和回源策略共同决定;任何一段放行,源站那一层的 403 就失去作用。而升级窗口只有几分钟,验证必须在升级之前完成,事后补做只能算排查,不能算防护。考虑到该漏洞已被列入已知被利用漏洞目录,这项验证值得按“需要证据的验收”来做,而不只是改一次配置。
验证入口要选公网域名
常见的错判是直接在服务器上请求本地地址,看到拒绝响应就认为完成。这只证明源站规则存在,证明不了边缘节点没有把旧的可达响应留在缓存里。正确的验证对象是站点的公网域名,走与外部请求完全相同的路径,最好再换一到两个网络出口重复一次,排除单节点或本地 DNS 带来的偶然结果。
把缓存和路径变体分开测
缓存是 CDN 场景下最主要的误判来源。如果该路径在配置规则之前被边缘缓存过,源站新加的拒绝不会立刻改写边缘已经持有的响应。验证时用带一次性查询串的请求绕开缓存,观察真实回源结果;再用不带参数的干净请求,确认边缘对其同样返回拒绝,而不是旧内容,也不是被重写规则兜底后的首页。两者都拒绝,才说明规则和缓存两侧都到位。
路径覆盖同样要逐个测,不能只测暂存目录本身:
- 目录带结尾斜杠与不带斜杠的两种形式
- 大小写不同的等价写法
- 经过编码的等价形式
- 暂存目录下的具体安装器入口文件,如
setup-config.php
这一类变体是前缀规则最容易漏掉的地方。全部返回拒绝,才算覆盖完整。
还有生效时间的问题。CDN 的规则下发与缓存失效都需要时间,改完立刻测很可能测到旧状态。比较稳妥的安排是把阻断配置提前到升级窗口之前,留出间隔再验证,通过后才执行核心更新。这一步不能省,因为从未修复版本升级到修复版本时,执行解包的仍是旧升级器代码,窗口在更新开始那一刻就已经打开。
验证通过后还有两件事。一是确认升级流程本身不依赖该路径的 HTTP 访问,升级器走的是 PHP 文件系统操作,阻断通常不会影响更新;二是在升级窗口内保留边缘与源站日志,事后检索该路径的访问记录。只有拒绝响应是规则生效的证明,出现一次成功响应则是需要取证的信号,两者性质完全不同,不能混在一起看。

参与讨论
缓存那块确实容易忽略,改完得等等再测