PHP 已为受支持的分支发布修复。发行版和托管服务可能在不更改版本号的情况下回移补丁。判断软件包是否仍受影响前,请先查看服务提供方的公告。
PHP 公告说明了什么
2026 年 10 月 21 日,PHP 项目发布了 CVE-2026-109618 和 CVE-2026-109619 的修复。这两项严重运行时漏洞在特定条件下,可能让处理 Web 请求的 PHP 环境遭到未认证的远程代码执行。PHP 建议在确认版本和服务方补丁前,把处理 Web 请求的安装视为存在风险。
CVE-2026-109618 与内存不足时内部状态损坏有关。CVE-2026-109619 描述了全局状态可能保留上一个请求的内存引用。无需尝试复现攻击;重点是有计划地更新,并确认应用仍能正常工作。
公告特别提到 Apache 使用 mod_php 时的风险,也列出了 PHP-FPM、php-cgi、FrankenPHP 和 LiteSpeed。实际影响取决于运行环境、配置和应用路径,不要假设所有部署都面临相同情况。
受影响版本与修复版本
表格汇总了 PHP 于 2026 年 10 月 21 日发布的上游版本。“修复起始版本”是该分支首个包含官方修复的版本。操作系统软件包、服务方镜像和托管 PHP 可能已回移补丁,但显示的版本号不变;请同时查看服务方公告。
PHP 8.2 的安全支持计划于 2026 年 12 月 31 日结束。8.2.35 修复了该分支中的这些 CVE,但也应计划迁移到仍受支持的分支。PHP 不再为 8.1 及更早版本发布常规版本。7.4、8.0 和 8.1 有最小源码补丁,一些服务方也会维护自己的软件包。请确认实际安装的软件包。
| PHP 分支 | 受影响版本 | 修复起始版本 | 安全支持 |
|---|---|---|---|
| 8.5 | < 8.5.12 | 8.5.12 | 支持中 |
| 8.4 | < 8.4.27 | 8.4.27 | 支持中 |
| 8.3 | < 8.3.36 | 8.3.36 | 支持中 |
| 8.2 | < 8.2.35 | 8.2.35 | 截至 2026-12-31 |
| 8.1、8.0、7.4 | 受影响;已结束常规支持 | 最小源码补丁或服务方软件包 | 向服务方确认 |
| 7.3 及更早版本 | 受影响;已结束支持 | 公告未列出上游版本 | 迁移;不要假设已有补丁 |
请在同一分支内比较版本。发行版软件包可能包含回移补丁,因此显示不同的版本号。
更新前:盘点并做好准备
找出所有使用 PHP 的位置:服务器、容器、基础镜像、托管面板、内置 PHP 的产品、后台任务和测试环境。同一网站可能运行多个版本。确认哪个服务接收流量,以及谁负责更新。
记录版本和软件包来源、操作系统、Web 服务器、运行环境、镜像(如适用)、应用、环境、负责人,以及出问题时如何恢复到上一个版本。不要公开 `phpinfo()`,其中可能包含敏感配置。请使用内部清单和获准使用的服务方工具。
如果要切换 PHP 分支,请先阅读服务方说明和迁移指南。准备维护窗口、可恢复的备份和明确的回退步骤。使用托管服务时,请服务方确认实际版本,以及是否需要重启或重新部署。
安全更新步骤
- 优先处理可从互联网访问的服务,并确认服务方是否已提供修复包。
- 按照操作系统、托管服务或镜像提供方的说明,先在接近生产环境的环境中更新。
- 使用已修复的镜像重新构建并部署容器;更新主机不会自动更改镜像中的 PHP。
- 按照服务方流程重启或替换 PHP 进程,确保它们加载新版本。
- 在实际接收流量的环境中确认版本,不要只在另一台终端检查。
- 执行基本检查和优先级较高的回归测试。
- 在约定的观察时间内查看应用错误、日志和指标。
- 如果关键功能失败,暂停部署,记录情况,并按计划恢复到上一个版本。WAF 或临时规则不能替代补丁。
- 01盘点 PHP 环境
- 02应用补丁
- 03确认运行进程
- 04测试业务流程
- 05检查结果
- 06决定是否部署
制定回归测试计划
补丁后的回归测试用于发现应用和集成中意外出现的问题。它不能证明 PHP 没有漏洞,也不能替代安全扫描、依赖项分析或配置检查。
明确变更范围:PHP 版本、服务、配置、扩展、依赖项和环境。找出使用 PHP 的流程,以及共享进程、会话、缓存、文件或队列的组件。根据业务影响、暴露程度和恢复难度安排优先级。未知依赖项应记录为待确认风险。
把测试分成三层:检查可用性和关键功能的基本测试;针对变更路径或依赖项的重点回归;以及覆盖高影响组件的扩展测试。记录版本、环境和测试数据,方便调查并重现结果。
测试用例示例
请根据系统架构和业务规则调整这些示例。它们不是通用测试包:删除不适用的内容,并补充自己的流程、扩展和集成。使用测试账号和虚构数据,不要使用真实密码或个人信息。
| 范围 | 示例 | 检查内容 | 建议保留的证据 |
|---|---|---|---|
| 可用性 | 启动、健康检查和主页面 | 进程状态、预期响应和依赖服务 | 版本、环境、时间和脱敏日志 |
| 身份验证 | 登录、退出和会话过期 | 会话有效性和退出行为 | 虚构账号及结果;不要记录密码或 Cookie |
| 权限 | 按角色允许或拒绝访问 | 有效权限和未授权访问的处理 | 角色、资源和实际结果 |
| 表单 | 创建或修改重要数据 | 校验、保存和业务规则 | 虚构数据和脱敏截图 |
| API | 成功、错误和超时响应 | 状态码、字段、认证和错误处理 | 已清理敏感信息的请求与响应 |
| 文件 | 上传、读取和下载 | 类型、大小、存储和权限 | 测试文件和结果 |
| 后台任务 | 队列、定时任务和重试 | 最终状态和错误处理 | 任务 ID、时间和脱敏输出 |
| 数据与会话 | 跨请求和进程的数据保持 | 一致性和用户隔离 | 虚构 ID 与前后状态 |
何时可以结束测试
开始前先确定哪些失败会阻止部署。如果登录、权限、关键操作、数据完整性或必要集成失败;无法确认修复版本;或新错误仍未查明,就不要继续。因环境或数据问题而无法执行的测试不算通过。
结束时,将测试覆盖范围与变更范围对照,检查失败、阻塞、待办项目、证据和剩余风险。全部通过只能说明已执行的用例通过,不能证明所有服务器都已安装修复。
检查清单
- 清单涵盖服务器、容器和服务方环境。
- 已记录软件包来源和用于确认修复的公告。
- 按服务方建议重启了实际接收流量的进程。
- 每项结果都记录了版本、环境和虚构测试数据。
- 失败、阻塞和剩余风险都有负责人。
- 证据中已移除密码和个人信息。
保存便于复查的测试证据
团队可以用 Treseko 整理用例、测试套件、版本、执行结果、缺陷和附件,查看已检查的内容和仍存在的风险。测试需要团队在自己的环境中配置和执行。Treseko 不会安装补丁,也不会自动发现所有 PHP 环境。
官方来源与参考资料
- PHP 官方安全公告
- CVE-2026-109618 安全公告 (PHP/GitHub)
- CVE-2026-109619 安全公告 (PHP/GitHub)
- 受支持的 PHP 分支
- PHP 官方下载
- PHP 8.5 官方迁移指南
本指南用于 QA 学习,不替代 PHP、操作系统、容器或托管服务提供方的说明。最后核对日期:2026 年 10 月 21 日。