信息截至:2026 年 10 月 21 日 17:25,北京时间。本文为补丁发布前版本。
PHP 网站管理员需要优先确认实际运行的 PHP 版本,并准备安装官方安全更新。在补丁尚不可用或无法立即升级时,应根据业务情况限制公网访问或暂停相关 PHP 服务。网上流传的两项 Session 配置可以用于通用加固,但不能据此认定本次漏洞已经修复。
漏洞预警与已知信息
2026 年 10 月 20 日,PHP 安全团队发布紧急安全更新预告,确认即将修复两个严重漏洞,CVSS v4.0 评分均为 9.2。计划发布时间为北京时间 2026 年 10 月 21 日 22:00;若技术细节提前公开或出现实际利用证据,官方可能提前发布。PHP 官方预告
安全机构的相关通报使用 CVE-2026-109618、CVE-2026-109619 两个编号,并将风险描述为远程代码执行,相关事件被称为 PHP2Shell。RCE 意味着攻击者可能在受影响服务中执行未经授权的代码,其后果取决于触发条件、服务权限和部署环境。watchTowr 说明 · CERT-EU 通报
截至上述信息时间,PHP 官方尚未公布完整的影响范围、触发条件和修复版本。因此,暂时不能把“PHP 5.4 之后所有配置都可被攻击”或某种具体反序列化链写成官方已经确认的结论。正式公告发布后,应以公告列出的版本和处置条件更新判断。
先确认网站实际使用的 PHP
在宝塔中进入:
网站 → 选择站点 → PHP 或 PHP 版本
记录每个网站所使用的 PHP 分支,再检查软件商店中的对应安装。宝塔支持多个 PHP 版本并行,不同网站可能绑定不同版本。因此,安装了新 PHP,不代表旧网站已经使用它;命令行执行 php -v,也不能单独证明网站的运行版本。宝塔站点 PHP 配置文档
排查时应包括主站、接口站、测试站及仍对外开放的 PHP 管理工具。如果还有独立容器或其他 PHP 服务,也应分别检查。
PHP 官方目前支持的分支为 8.2、8.3、8.4、8.5。对应的处置方向如下:
当前运行环境 | 处理方向 |
|---|---|
PHP 8.2、8.3、8.4、8.5 | 等正式公告确认修复版本后,更新到所在分支中明确包含补丁的版本 |
PHP 8.1、7.x、5.x 等旧分支 | 迁移到兼容且受支持的 PHP 分支;若依赖供应商回移补丁,核对其安全公告和包修订号 |
多版本 PHP 或多个容器 | 逐个核对仍在使用的实例,避免只更新其中一个 |
受支持不等于当前安装已经安全,升级到某个大版本也不等于包含本次补丁。PHP 支持周期
补丁发布前先控制公网访问
CERT-EU 建议,在无法立即修补时,考虑将对互联网开放的应用暂时隔离,直到可以应用修复。CERT-EU 处置建议
暂停对应的 PHP 服务
如果网站允许短暂停机,可以在宝塔中进入:
软件商店 → 已安装 → 对应 PHP 版本 → 设置 → 服务 → 停止
停止一个版本的 PHP-FPM,会影响共用该版本的全部网站。动态页面可能出现 502 等错误;其他独立 PHP 服务、容器和常驻进程需要另行处理。只停止宝塔面板,不等于停止网站的 PHP 服务。宝塔服务管理说明
如果仍需运维访问,可以在安全组、防火墙或 Web 服务器层,仅放行可信固定 IP 或 VPN。限制应覆盖 HTTP、HTTPS、其他开放端口、源站直连和实际使用的 IPv6 入口;只限制后台登录页不够。
使用 Nginx 返回维护响应
对于 Nginx 网站,可以先备份配置,再在对应的 server { ... } 内、现有重写或跳转指令之前加入:
return 503 "Site temporarily unavailable\n";
不要只放在 location / 中。HTTP 和 HTTPS 如果分属不同的 server,应分别覆盖。Nginx 官方文档说明,server 层相关指令先于 location 匹配执行,return 可以直接结束处理并返回响应。Nginx return 文档
使用宝塔默认安装路径时,可先检查配置:
/www/server/nginx/sbin/nginx -t
只有检查成功,才执行重载:
/etc/init.d/nginx reload
重载后,从外部网络检查首页、动态页面和接口,以及其他可直达的入口。这里的维护响应属于临时隔离,不是漏洞补丁。
**不要通过单纯删除 PHP 解析规则来“关闭 PHP”。**如果源代码目录仍对外开放,失去解析的 PHP 文件可能被当成普通文件下载,泄露源码或配置。这是依据 Nginx 静态文件与 FastCGI 请求处理方式需要防范的配置风险。Nginx 请求处理说明
两项 Session 配置的作用与局限
网上流传的配置是:
session.upload_progress.enabled = 0 session.use_strict_mode = 1
两项设置各自有明确用途,但目前不能把它们称为已经验证能够完整阻断本次两个 CVE 的修复方案。watchTowr 当前处置说明
配置 | 实际作用 | 需要检查的影响 |
|---|---|---|
| 关闭 PHP 内置的 Session 上传进度跟踪 | 普通文件上传通常仍可使用;依赖该机制的进度显示会受影响 |
| 拒绝尚未初始化的 Session ID,帮助防止会话固定 | 检查登录和会话处理逻辑的兼容性 |
PHP 官方建议不需要其上传进度功能的应用考虑关闭该选项,也建议启用严格 Session 模式。严格模式不是“安全反序列化开关”;自定义 Session handler 若缺少必要的 ID 验证实现,即使配置值为 1,也可能实际不起作用。Session 配置文档 · 上传进度文档
分号会让配置变成注释
下面这一行不会应用关闭设置:
;session.upload_progress.enabled = 0
开头的分号表示注释,PHP 会忽略后面的内容。需要启用配置时,应删除行首分号,并检查是否存在其他生效的同名设置。PHP 配置文件语法
在宝塔中修改并验证
确认站点绑定的 PHP 版本,备份该版本的配置。
打开对应 PHP 的“配置文件”,搜索并修改上述两项,确保没有行首分号。
保存配置,重启对应 PHP 服务。若此前已停服务,应先保留 Web 层的访问限制,再启动 PHP 做受限验证。
在该站点实际使用的 Web PHP 环境中检查有效值,并测试登录、退出和上传。
不要将关闭上传进度的设置替换成业务代码中的 ini_set() 调用。该配置属于 INI_PERDIR,不能通过脚本中的 ini_set() 修改。PHP 配置修改范围
可以在已有且限制访问的诊断入口执行以下只读检查:
<?php
var_export([
'upload_progress' => ini_get('session.upload_progress.enabled'),
'strict_mode' => ini_get('session.use_strict_mode'),
]);上传进度关闭时,值可能为字符串 "0" 或空字符串;严格模式开启时通常为 "1"。如果返回布尔值 false,表示配置项不存在,不能把它当作成功关闭。临时检查页用完即删除,不要公开完整的 phpinfo() 页面。ini_get 文档
如果值与预期不一致,应检查是否改错 PHP 版本,以及额外 INI 文件、FPM 配置、目录级配置或应用代码是否覆盖了可修改的项目。这一步只能验证配置是否生效,不能证明漏洞已经修复。
正式补丁发布后的修复流程
正式修复的目标是:网站实际运行的 PHP 构建明确包含本次补丁,相关进程已重新启动,并完成业务验证。
核对修复版本与安装来源
先查看 PHP 正式安全公告,再确认宝塔、系统软件源或镜像维护方提供的版本包含补丁。不要提前猜测修复版本号,也不要仅凭面板显示“最新版本”判断已经完成修复。
如果供应商通过回移补丁修复旧版本,应依据其公告和包修订号核验,不能只看上游版本字符串。仅更新网站代码或插件,不能替代对 PHP 运行环境的处理。PHP 安全更新预告 · Sansec 处置说明
备份并检查兼容性
备份网站文件、数据库和运行配置。如果需要从 PHP 7.4 等旧分支迁移,应在受限环境中检查程序、插件、扩展和数据库驱动是否兼容目标版本。
测试失败时应继续维持访问限制,再解决兼容性问题;不要直接恢复旧的、尚未修复的公网运行环境。
更新实际承载网站的 PHP
通过原有安装和维护渠道更新对应的 PHP。宝塔用户更新后,还要回到每个站点的 PHP 设置中核对绑定关系。
独立容器需要更新并替换运行实例;使用 Apache PHP 模块或其他常驻 PHP 服务时,也应按各自部署方式让新运行环境生效。不要只更新命令行 PHP。
重启并在受限环境中验证
重启对应 PHP-FPM 或实际承载 PHP 的进程,核对网站运行时的完整版本和供应商补丁信息。随后验证首页、登录、后台、文件上传、数据库连接和关键接口,查看是否出现新的错误。
保持现有访问限制,直到版本、进程和业务检查通过。若需要查看诊断信息,仍应使用受限制的入口。
确认后恢复公网访问
恢复前确认:
每个对外 PHP 实例均已按正式公告完成处置。
网站使用的是已经修复的运行环境,旧进程已退出。
关键功能验证通过。
临时诊断页面已清理。
维护规则和访问限制的撤销范围明确。
如果此前已发现木马、异常文件或其他入侵迹象,补丁安装后仍需要处理入侵事件,不能把升级本身当成后门已经清除。
常见误区
只禁用 exec 或 system 就能防住 RCE。
这些设置限制特定函数调用,不能据此推断能够阻断本次漏洞。PHP 官方也明确提示,disable_functions 可能被绕过,open_basedir 并非完整安全边界。PHP 核心配置文档
已经开启 WAF 就可以不升级。
应核验厂商是否明确提供覆盖这两个 CVE 的规则及适用条件,同时确认源站不能绕过防护直接访问。不能把开启普通防护开关当成已经修复。
补丁发布后还有 15 分钟安全时间。
“15 分钟内可能出现大规模攻击”来自 Sansec 的预测,不是攻击必然开始的时间,也不是可放心等待的窗口。Sansec 原文
改完两项 Session 配置就可以解除停站。
配置加固、访问隔离和补丁修复解决的是不同问题。恢复访问应依据正式公告、实际运行环境及验证结果,而不能仅凭两项配置值。



还没有评论,来说两句吧...