WordPress 核心更新期间,wp-content/upgrade/ 可能短暂出现解压后的临时文件。如果 Web 服务器能够直接访问这个目录,更新动作本身就会形成一个需要单独防护的时间窗口。CVE-2026-119977 被描述为与 WordPress 核心更新过程有关的竞态问题,并已被列入 CISA 已知被利用漏洞目录。站长和运维人员应把核心升级当作一次小型变更处理:先确认版本和更新路径,再遮断临时目录的 HTTP 访问,完成更新后核对版本、业务功能和日志,最后决定是否保留或撤销临时配置。

先确认影响范围和更新路径
先记录当前站点的 WordPress 版本、PHP 版本、Web 服务器类型、站点根目录和是否启用了自动更新。检查时应同时观察登录、后台更新、媒体上传、插件运行和定时任务,因为这些功能会影响维护窗口的选择。
可以在 WordPress 根目录执行:
wp core version
wp config get WP_AUTO_UPDATE_CORE --type=constant如果使用 WP-CLI 的账号没有足够权限,命令可能失败。此时可以从后台“仪表盘—更新”查看版本,也可以根据站点文件和部署记录核对,但不要仅凭文件修改时间判断是否已经完成升级。
建议把结果记录成一行变更信息:
| 项目 | 需要确认的内容 |
|---|---|
| 当前版本 | 当前实际运行的核心版本,以及所属分支 |
| 目标版本 | 官方安全公告对应的修复版本或分支补丁 |
| 更新方式 | 后台手工更新、WP-CLI、主机面板、部署流水线或自动更新 |
| Web 入口 | Nginx、Apache、反向代理、CDN 或 WAF 的实际请求路径 |
| 站点路径 | 域名根目录部署,还是 /blog/ 等子目录部署 |
| 回滚条件 | 更新失败、登录异常、上传失败、插件报错或关键接口不可用 |
具体受影响版本和修复版本应以 WordPress 官方安全通告、发行说明以及适用分支公告为准。不要因为某篇第三方文章给出了一个固定版本号,就把它直接写入批量升级脚本。
更新前先封住临时目录
WordPress 需要通过本地文件系统在 wp-content/upgrade/ 中准备更新文件,正常更新流程不需要浏览器通过 HTTP 读取这个目录。因此,最小化的临时措施是在 Web 服务器入口拒绝该路径的请求。
如果站点部署在域名根目录,Nginx 规则可以放在对应的 server 块中:
location ^~ /wp-content/upgrade/ {
deny all;
return 403;
}^~ 用于优先匹配这个前缀路径,避免后续的正则 location 接管请求。deny all 已经会拒绝访问,显式写出 return 403 便于阅读和核对;如果现有 Nginx 版本或配置规范对两者处理方式有要求,应按当前环境验证。
如果 WordPress 安装在 /blog/,规则应匹配实际公开路径:
location ^~ /blog/wp-content/upgrade/ {
deny all;
return 403;
}规则应放在实际处理站点请求的 Nginx 虚拟主机中,而不是只放在某个未生效的默认配置文件里。也不要把这项控制只交给 WordPress 安全插件:Web 服务器层的拒绝发生在 PHP 和 WordPress 代码执行之前,覆盖范围更稳定。
修改后先检查语法,再平滑加载配置:
sudo nginx -t
sudo systemctl reload nginx预期结果是 nginx -t 显示语法检查成功,reload 不会中断现有连接。若语法检查失败,不要继续更新,应先恢复上一个可用配置文件并重新检查。
随后从站点外部测试:
curl -i https://example.com/wp-content/upgrade/
curl -i https://example.com/wp-content/upgrade/index.php预期返回 403 Forbidden 或由上游安全设备统一返回的拒绝状态。若仍然得到 200、301、目录列表或来自 PHP 的响应,应检查以下位置:
- DNS 是否指向另一台入口服务器;
- CDN、负载均衡或反向代理是否使用了不同的配置;
- Nginx
root和站点实际目录是否一致; - 站点是否部署在子目录;
- 是否存在更高优先级的
location; - 是否有另一套 Web 服务直接监听公网端口。
遮断规则生效后,再执行核心更新。更新期间不要删除或移动 wp-content/upgrade/,也不要通过在该目录内放置 .htaccess 或临时文件来代替服务器配置。更新程序可能清理或重建临时目录,目录内的控制文件不能作为稳定的入口防护。
自动更新场景要在主机层兜底
自动更新无法保证每个站点都在同一时刻完成,也无法替代更新后的版本核验。对于启用了后台核心自动更新的站点,建议把 Nginx 拒绝规则作为长期入口控制,而不是只在人工维护时临时添加。
如果环境允许,可以先确认自动更新配置:
wp config get WP_AUTO_UPDATE_CORE --type=constant
wp cron event list | rg 'update|core'自动更新通常还依赖 WP-Cron、主机任务、文件权限和出站网络访问。Nginx 只拒绝外部 HTTP 请求,不应阻止 PHP 进程或系统账号在本地文件系统中读写升级目录。若主机面板使用独立的更新服务,还要确认它通过本地文件系统执行更新,而不是依赖一个需要公开访问的临时 URL。
批量管理站点时,至少为每个站点保存以下证据:
- 更新前后的
wp core version输出; - 更新任务的开始和结束时间;
- Nginx 配置变更记录;
- 更新失败时的错误日志;
- 更新后登录、首页、上传和关键业务接口的检查结果。
对于无法立即升级的站点,入口遮断只能降低更新窗口暴露面,不能视为漏洞修复。应继续安排官方修复版本、适用分支补丁或主机厂商回补,并明确逾期处置人。
更新后按顺序验收
更新命令返回成功并不等于站点已经完成变更。先核对核心版本:
wp core version
wp core verify-checksums校验和命令需要能够访问适用的校验数据;如果网络、镜像或版本分支导致校验无法完成,应记录原因并使用可信的发布包或部署制品进行人工复核,不要把“命令无法执行”当成“文件一定被篡改”。
然后检查升级目录的状态:
find wp-content/upgrade -maxdepth 2 -type f -printf '%M %u:%g %p\n' 2>/dev/null正常情况下,更新结束后不应留下不明的可执行脚本、异常压缩包或与本次更新无关的文件。不要仅依据目录为空就判断安全;还需要结合文件所有者、修改时间、部署日志和 Web 访问日志判断是否存在异常活动。
业务验证应使用低风险测试账号或维护窗口内的测试步骤,至少覆盖:
- 站点首页和主要内容页能否正常打开;
- 管理员能否登录后台并进入“更新”页面;
- 媒体上传、缩略图生成和静态资源访问是否正常;
- 关键插件、主题和自定义代码是否报 PHP 错误;
- 定时任务、邮件发送和备份任务是否仍能运行;
- 反向代理、缓存和 HTTPS 跳转是否保持原有行为。
如果更新后出现 500、登录循环、上传失败或插件致命错误,应先保留现场证据,再按既定回滚路径处理。不要为了恢复访问而直接删除核心文件或覆盖整个站点目录。
检查访问日志中的升级目录请求
在更新前后设定一个明确的观察窗口,查看 Nginx 访问日志中对升级目录及其下级路径的请求:
sudo rg '/wp-content/upgrade/' /var/log/nginx/access.log*重点关注:
- 请求是否来自公网;
- 是否集中出现在更新开始前或更新过程中;
- 是否请求了 PHP、配置文件、压缩包或可疑的临时文件;
- 状态码是否为
200、206或其他成功响应; - 请求是否伴随异常的 User-Agent、Referer 或高频扫描行为。
对被规则拦截的请求,403 只能说明入口拒绝了请求,不能单独证明没有其他路径暴露。还应检查站点根目录、备份目录、上传目录、缓存目录和反向代理缓存中是否存在同一批异常文件。
如果日志显示在遮断规则生效前出现了成功访问,按安全事件流程保存原始日志、访问时间、源地址、请求路径和关联主机信息,并进一步检查核心文件、插件、主题、管理员账号、计划任务和出站连接。本文的临时规则不能替代受影响主机的完整调查。

恢复规则还是长期保留
wp-content/upgrade/ 没有面向访客提供内容的业务需求,因此更稳妥的做法是长期保留 Web 入口拒绝规则,并把它纳入站点模板、配置管理或主机基线。这样可以覆盖人工更新、自动更新和主机面板更新之间的时间差。
如果组织流程要求把它作为临时变更,只有在以下条件都满足后才考虑撤销:
- 已确认站点运行的是官方修复版本或适用分支补丁。
- 已完成首页、后台、登录、上传、任务和备份验证。
- 已检查更新前后的访问日志,没有需要升级处理的成功异常请求。
- 已保存当前 Nginx 配置和可恢复的上一版配置。
- 已明确恢复后的观察负责人和截止时间。
撤销前先备份配置,然后删除或注释对应的 location,再次执行:
sudo nginx -t
sudo systemctl reload nginx
curl -i https://example.com/wp-content/upgrade/如果恢复后目录出现可浏览内容、目录列表或意外的 200 响应,应立即重新启用拒绝规则。若更新工具在规则存在时失败,则先确认失败原因是否来自主机面板对 HTTP 路径的特殊依赖,再选择回滚规则、完成更新、重新加载规则的短窗口方案;同时记录这一例外,避免把同一配置直接推广到其他站点。
一次合格的 WordPress 更新,应当同时留下版本证据、入口防护证据、业务验收结果和日志检查结论。这样才能把 wp-content/upgrade/ 的短暂暴露从“更新时顺手处理的问题”,变成可复核、可回滚的安全运维控制。
- it2021
- it2021.com
- nginx
- WordPress
- WordPress 安全
- 代码执行
- 安全设备
- 安全运维





重庆 重庆 1F
更新目录长期拒绝访问更省心
西藏 山南 2F
子目录部署时路径确实容易配错
3F
自动更新也不能省略版本核验
4F
403只能说明入口被挡住了
5F
日志观察窗口这个提醒很实用