
PHP官方近期披露多个高危安全漏洞,波及当前所有受支持的主要版本(8.2、8.3、8.4、8.5),以及已停止官方维护的旧版本(8.1及更早)。漏洞涵盖Session上传进度竞争条件、SOAP扩展远程代码执行、HTTP流重定向凭据泄露、PHP-FPM访问控制绕过等多个攻击面,建议所有站点运营者立即评估并采取修复行动。
Table of Contents
Toggle以下版本存在已知漏洞,必须升级:
这是最根本的修复方式。根据你的服务器环境选择对应命令:
Ubuntu / Debian(使用 ondrej/php PPA):
sudo apt update
sudo apt upgrade php8.4 # 替换为你使用的版本号
php -v # 确认版本已更新
CentOS / AlmaLinux / Rocky Linux(使用 Remi 源):
sudo dnf update php
php -v
通过 php.net 手动编译安装:前往 php.net/downloads 下载对应版本源码,按现有编译参数重新编译安装。升级完成后务必重启 PHP-FPM 或 Web 服务器(nginx/apache)。
Session 上传进度功能存在竞争条件漏洞,可被攻击者利用写入或篡改 Session 数据,进而导致权限提升或数据污染。若你的应用不依赖该功能(绝大多数站点均不需要),应立即在 php.ini 中将其禁用:
session.upload_progress.enabled = Off
修改后执行 sudo systemctl restart php8.4-fpm(版本号替换为实际版本)使配置生效。可通过 php -i | grep upload_progress 验证是否已关闭。
PHP-FPM 在处理 IPv6 地址比对时存在逻辑缺陷,可能导致 allowed_clients 访问控制被绕过。临时缓解措施:确保你的 FPM 池配置文件中明确列出所有允许的客户端 IP,并避免混用 IPv4 和 IPv6 表示方式:
; /etc/php/8.4/fpm/pool.d/www.conf
listen.allowed_clients = 127.0.0.1
PHP 的 HTTP 流包装器(stream wrapper)在跟随跨域重定向时可能泄露 Authorization 请求头。如果你的代码使用 file_get_contents 或 stream_context_create 进行带认证头的 HTTP 请求,应在上下文选项中明确禁止自动跟随重定向,或在重定向后手动清除认证头:
$context = stream_context_create([
'http' => [
'follow_location' => 0, // 禁止自动跟随重定向
]
]);
如果生产环境升级需要测试周期,可先执行以下临时缓解措施:(1)在 php.ini 中关闭 session.upload_progress.enabled;(2)通过 Web 服务器(nginx/Apache)层面限制对 PHP-FPM 状态页的外部访问;(3)在防火墙层面严格控制 FastCGI 端口(9000)的访问来源;(4)开启错误日志监控,重点关注异常 Session 操作与非预期 HTTP 重定向。
使用 PHP 8.1 及以下版本的站点处于最高风险敞口——这些版本已不再获得官方安全补丁,强烈建议迁移至受支持的版本分支,或立即联系主机服务商申请官方 Backport 补丁支持。