必须重建镜像并升级到php 8.2.35/8.3.36/8.4.27/8.5.12等修复版本,仅改配置或重启容器无效;需更新dockerfile的from指令、重建镜像、彻底重启php-fpm或mod_php进程。

容器环境修复 PHP2Shell 漏洞,核心就一条:必须重建镜像并升级到带补丁的 PHP 版本,不能只改配置或重启容器。
确认当前镜像是否受影响
先检查你用的 PHP 基础镜像版本:
- 在本地或 CI 中运行:docker run --rm your-php-app php -v,看输出是否低于 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12
- 常见高危镜像包括:php:8.2-apache、php:8.3-fpm、wordpress:latest(底层常是旧版 PHP)、drupal:apache 等
- 别信“只是小版本号差一点”——CVE-2026-109618 和 CVE-2026-109619 影响从 PHP 5.4 到 8.5.11 的几乎所有分支
立即更新 Dockerfile 并重建镜像
不要 patch 运行中的容器,要从源头替换基础层:
- 把 FROM php:8.2-apache 改成 FROM php:8.2.35-apache(或对应修复版)
- 如果使用 Alpine,确保是 php:8.3.36-cli-alpine 等官方已发布的安全标签
- 删掉所有自定义的 apt/yum 升级 PHP 的尝试——容器内包管理器无法覆盖 PHP 核心二进制,无效
- 构建后验证:docker build -t myapp:new . && docker run --rm myapp:new php -v
上线前必须重启服务进程
光换镜像不够,旧容器还在用带毒的 PHP 进程:
- Docker Compose 用户:执行 docker-compose down && docker-compose up -d,强制销毁旧容器
- Kubernetes 用户:滚动更新时设置 minReadySeconds 和 readinessProbe,确保新 Pod 启动成功再切流量
- 关键点:PHP-FPM 或 mod_php 进程必须全部终止并由新镜像重新拉起,否则残留 worker 仍可被利用
临时加固(仅限无法立刻重建的场景)
这不是替代方案,而是争取时间的缓冲动作:
- 在 Nginx 或 Apache 的反向代理层加请求过滤,拦截含 Content-Type: multipart/form-data 且带空 filename(filename="")的上传请求
- 限制 PHP-FPM 的 pm.max_requests=1,让每个 worker 处理完一个请求就退出,降低 UAF 触发概率(但性能下降明显)
- 禁用 session.upload_progress(在 php.ini 中设 session.upload_progress.enabled = Off),可缓解 CVE-2026-109619
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











