php 8.1.28 受 cve-2024-4577 和 cve-2024-5458 影响,未修复;需升级至 8.1.29 或更高版本,并在 windows cgi 环境下确认系统编码、禁用 php-cgi 或配置 cgi.force_redirect=1。

PHP 8.1.28 本身不是漏洞版本,而是存在已知漏洞的版本——它受 CVE-2024-5458(URL验证绕过)和 CVE-2024-4577(Windows CGI 参数注入)等影响。所谓“修复是否生效”,本质是验证你当前运行的 PHP 是否已升级到官方已修复的版本,或关键配置是否已规避风险。不能靠“执行某段代码看是否报错”来测命令执行漏洞,因为这类漏洞不体现为语法错误,而表现为非预期的行为(如恶意参数被解析、敏感信息泄露、远程代码被执行)。验证必须结合版本号、补丁状态、运行环境与配置三方面。
确认实际运行的 PHP 版本号
Web 服务使用的 PHP 版本可能和命令行中 php -v 显示的不同。必须查服务器真实执行环境:
- 在 Web 根目录新建 phpinfo.php,内容为
<?php phpinfo(); ?> - 通过浏览器访问该文件,找到顶部 “PHP Version” 字段,记录完整字符串(如 8.1.28)
- 立即删除该文件,防止敏感信息暴露
核对版本是否已在官方修复范围内
打开 PHP 官方安全公告页:https://www.php.cn/link/0f6e0cfe0582d0afb162ba1d3ec21a08,按 Ctrl+F 搜索:
- 8.1.28 → 若出现结果且标注 “Fixed in: 8.1.29”,说明该版本未修复 CVE-2024-5458
- 8.1(主版本)→ 查看是否有针对 8.1.x 系列的公告,尤其关注 2024 年 6 月后发布的条目
- 若搜索不到 8.1.28,但看到 “8.1.29 released on 2024-06-13” 类似信息,说明 8.1.28 是上一版,存在已知问题
检查是否处于 CVE-2024-4577 高危环境(仅 Windows)
该漏洞依赖系统编码特性,只影响特定 Windows 配置:
- 确认操作系统为 Windows(非 WSL 或 Linux 容器)
- 检查系统语言与代码页:简体中文(936)、繁体中文(950)、日文(932)——任一满足即属风险环境
- 确认 Apache + PHP-CGI 模式(非 mod_php 或 php-fpm),且未禁用 CGI 模块
- 若满足以上全部条件,仅升级到 8.1.29 不够,还需在 php.ini 中设置
cgi.force_redirect = 1并确保cgi.fix_pathinfo = 0
验证关键配置是否关闭危险行为
即使版本未更新,合理配置也能阻断常见利用链:
- 检查
php.ini中disable_functions是否包含system,exec,passthru,shell_exec,proc_open,pcntl_exec - 确认
open_basedir已启用并限制在项目目录内(如/var/www/myapp/:/tmp/) - 若使用 Apache,检查
httpd.conf或虚拟主机配置中是否禁用Options ExecCGI和AllowOverride None
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











