没有 PHP 开发人员,老站又必须修复 PHP2Shell?先恢复管理权、验证备份并识别运行时,再选择带补丁的 PHP、迁移或静态归档。

01

先找回管理权,不急着切 PHP

清点域名注册商、主机账号、服务器或面板权限、代码、数据库凭据和续费负责人。明确谁批准维护窗口、谁负责恢复。根据本地文件识别真实系统及准确版本,不能靠前台模板猜测。账号、源码不全时,先向服务商或原供应商恢复资料,再动生产环境。

02

保留证据,并真正恢复一次备份

怀疑被入侵时先保留访问、错误和应用日志,按入侵响应指南处置。把代码、数据库、上传附件、配置与定时任务作为同一日期的备份集,记录字符编码和外部存储。备份应加密并限制访问,恢复到私有环境后检查文章、附件和登录。显示“备份成功”不等于能够恢复。

补丁不代表从未遭到入侵 ↗

03

先画清 PHP 代际差距

PHP 5.3/5.6 老项目可能依赖 mysql_* 等已移除接口。PHP 7 移除 ext/mysql;PHP 8 移除 each()、create_function() 并收紧签名和类型规则;PHP 8.2 对动态属性报弃用提示。逐代阅读跨过的迁移说明。框架历史最低要求不代表适合继续部署,也不能代替二次开发代码兼容测试。

04

选择修复、分阶段迁移或静态归档

兼容性改造期间,若厂商在原分支提供可信修补,可先核实两个 CVE 的修复证据和后续维护。停止支持的 PHP 仍需迁到受支持目标,不能长期只靠 WAF。持续经营且可接管的系统适合修复;依赖废弃严重时评估重建;纯内容老站可评估静态归档,同时处理登录、搜索和表单等后端功能。

05

建立贴近目标环境的私有演练站

让 Web PHP、扩展、INI、数据库和路由配置贴近目标。使用脱敏数据、访问控制,阻止演练站发真实邮件、扣款或调用生产回调。框架、插件与二次开发必须成组升级。执行对应系统的业务验收清单,保存日志和结果。不懂代码的负责人也可要求主机商交付这些记录。

06

回退方案必须考虑订单和数据库变更

保留配套的代码与数据库恢复集。切回 PHP 不能撤销数据库结构迁移。最终迁移前约定订单、文章等写入冻结,或采用经过演练的数据同步办法。明确失败条件、操作人和回退时限;记录快照后新增订单,测试恢复与对账,不能靠丢掉新交易来完成回退。

07

上线后检查真实运行服务

核对域名实际使用的 PHP、每个 FPM 池、队列、定时任务、容器和副本,替换旧工作进程并检查启动错误。按上游版本或厂商回补公告核实两个 CVE,再验证深链接、登录、上传和业务流程。保留日志与观察回退窗口;CLI 的 php -v 和首页正常都不够。

核实 PHP2Shell 修复 ↗

PHP2Shell 修复后的业务验收

登录、会话与角色权限

用测试账号完成登录、退出、找回密码,再用新会话检查后台权限、角色限制和会话持久性。

深链接、路由与状态码

访问原有文章深链接、提交表单并请求不存在页面,对比路由参数、跳转和 HTTP 状态码。

数据库读写与事务

在测试库读写代表性数据,检查 PDO/MySQL 驱动、严格 SQL、事务与数据往返;连上数据库不等于业务可用。

自定义模板、标签与转义

渲染文章、列表、账号和错误页,核对自定义标签、转义及编译缓存,同时查看应用日志中的警告。

上传、缩略图与存储权限

上传无害测试图片、读取缩略图并删除,核对目录权限、存储路径和访问 URL,保持可执行文件上传限制。

新旧队列任务与重试

让新工作进程分别消费新任务和队列已有任务,验证重试、序列化与进程替换,防止重复执行业务。

定时任务与实际 PHP 路径

核对计划任务实际使用的 PHP 路径、INI 和运行账号,在演练环境运行无害任务,上线后复核同一运行时。

冷热缓存与 OPcache

按项目文档重建应用与容器缓存,分别测试冷缓存和热缓存,清理旧序列化数据及仍驻留的旧 OPcache 进程。

测试邮件投递

把找回密码及订单邮件发到测试邮件收集器,核对模板、队列投递和传输错误,演练环境不要联系真实客户。

订单、税费与库存

完成包含运费、税费、优惠和退款的沙箱订单,核对合计、库存变动和历史订单,再恢复生产接单。

沙箱支付与异步通知

测试沙箱支付成功、失败与异步通知,校验签名和幂等,确保重试不会重复扣款或创建订单。

多站点、域名与语言

逐个检查站点、域名和语言,并使用对应角色账号验证共享 Cookie、URL 映射及站点独立配置。

GBK/UTF-8 与数据往返

让中日文与特殊字符经过表单、数据库和导出往返,未单独演练编码迁移前保留原有 GBK/UTF-8。

API 契约与外部回调

分别测试带认证和未认证的 API,比较 JSON 类型、校验错误、状态码及外部系统回调。

Web/CLI 扩展与 ABI

确认 Web PHP 和 CLI 都加载所需扩展,ABI 与 NTS/ZTS 构建一致;不能只看 php -m,还要验证驱动和关联服务。

核实 PHP2Shell 修复

应用兼容性、应用维护支持和 PHP 安全是三项独立检查。选择仍受支持且修复两个 CVE 的 PHP 分支,再验证 Web 工作进程、定时任务和全部副本。只更新框架或插件不会更换 PHP 解释器。

四个分支,明确的升级目标。
PHP 分支低于此版本的上游发行版首个修复版本安全支持结束
PHP 8.5< 8.5.12✓ 8.5.122029年12月31日
PHP 8.4< 8.4.27✓ 8.4.272028年12月31日
PHP 8.3< 8.3.36✓ 8.3.362027年12月31日
PHP 8.2< 8.2.35✓ 8.2.352026年12月31日
仍在使用 PHP 8.1 或更早版本?

这些分支不会获得 PHP 项目常规版本更新。7.4、8.0、8.1 有最小源码回移植;厂商补丁状态需单独核实。 阅读指南 ↗

原始来源

PHP security team原始来源 ↗CVE-2026-109618原始来源 ↗CVE-2026-109619原始来源 ↗PHP 7.0原始来源 ↗PHP 8.0原始来源 ↗PHP 8.2原始来源 ↗PHP原始来源 ↗Composer原始来源 ↗
修复 PHP2Shell 时的 PHP 升级报错排查 ↗← 返回应用升级资料库