没有 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 进程。
测试邮件投递
把找回密码及订单邮件发到测试邮件收集器,核对模板、队列投递和传输错误,演练环境不要联系真实客户。
订单、税费与库存
完成包含运费、税费、优惠和退款的沙箱订单,核对合计、库存变动和历史订单,再恢复生产接单。
沙箱支付与异步通知
测试沙箱支付成功、失败与异步通知,校验签名和幂等,确保重试不会重复扣款或创建订单。
搜索索引、筛选与权限
在副本重建搜索索引,验证已知关键词、筛选和访问权限;PHP 请求成功不能证明搜索服务兼容。
多站点、域名与语言
逐个检查站点、域名和语言,并使用对应角色账号验证共享 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.12 | 2029年12月31日 |
| PHP 8.4 | < 8.4.27 | ✓ 8.4.27 | 2028年12月31日 |
| PHP 8.3 | < 8.3.36 | ✓ 8.3.36 | 2027年12月31日 |
| PHP 8.2 | < 8.2.35 | ✓ 8.2.35 | 2026年12月31日 |
这些分支不会获得 PHP 项目常规版本更新。7.4、8.0、8.1 有最小源码回移植;厂商补丁状态需单独核实。 阅读指南 ↗