是,PHP 8.1.28 属于受影响版本(8.1 < 8.1.29),在 Windows 中文/日文系统下,php-cgi.exe 存在 CVE-2024-4577 远程命令行参数注入漏洞,无法通过配置修复,必须升级至 8.1.29 或禁用 CGI 模式。

PHP 8.1.28 是受 CVE-2024-4577 影响的危险版本
直接说结论:php-cgi.exe 在 PHP 8.1.28(Windows + 中文/日文系统)下存在可被远程利用的命令行参数注入漏洞,**不能靠配置修补,必须升级或禁用 CGI 模式**。这个版本恰好落在官方划定的“8.1 ”受影响区间内,且漏洞利用门槛极低——只要 Apache 配置了 <code>Action 或 ScriptAlias 暴露 php-cgi.exe,攻击者用一个含 %AD 的 URL 就能绕过所有过滤执行任意代码。
升级到 8.1.29 是唯一可靠修复方式
PHP 官方在 2024 年 6 月 6 日发布的 8.1.29 版本中,通过两处关键修改堵住漏洞:
- 在
sapi/cgi/cgi_main.c的参数解析逻辑中,**显式拒绝所有0x80–0xFF范围内的字节**(包括%AD对应的0xAD),不再依赖 Windows 的 Best-Fit 转换后判断 - 强化对命令行参数中连字符
-的校验,防止其被%AD“转换”后冒充合法选项前缀
注意:不要尝试用 php.ini 关闭 allow_url_include 或设 cgi.force_redirect=1 来“缓解”——CVE-2024-4577 的本质是让 PHP 进程在启动阶段就误解析参数,这些运行时配置根本没机会生效。
若暂时无法升级,必须彻底禁用 php-cgi.exe 的 Web 可访问性
临时规避不是改配置,而是从服务器层面切断攻击入口:
立即学习“PHP免费学习笔记(深入)”;
- 检查 Apache 的
httpd.conf和所有.htaccess文件,删除所有含Action cgi-script、SetHandler application/x-httpd-php-cgi或ScriptAlias /php-cgi/的行 - 确认
php-cgi.exe文件**不在任何被ScriptAlias或Alias映射的 Web 可访问路径下**(例如C:/xampp/cgi-bin/或C:/xampp/php/) - 如果使用 XAMPP,默认安装会把
php-cgi.exe放在C:/xampp/php/并通过ScriptAlias /php-cgi/ "C:/xampp/php/"暴露——这必须删掉,且建议将该目录权限设为仅SYSTEM和管理员可读
仅停用 mod_php 或改用 php-fpm 不够——只要 php-cgi.exe 还能被 HTTP 请求直接调用,漏洞就依然有效。
别忽略 Windows 系统区域设置这个隐藏触发点
这个漏洞不会在英文版 Windows 上触发,但很多人忽略了自己系统的实际代码页:
- 运行
chcp命令,输出Active code page: 936(简体中文)、950(繁体中文)或932(日文)即为高危环境 - 即使你装的是英文版 Windows,只要控制面板 → 区域 → 管理 → 更改系统区域设置里选了“中文(简体,中国)”,代码页仍是 936
- Apache 或 PHP 自身无法检测或规避 Best-Fit 转换,所以**不能寄希望于“我只用 UTF-8 就安全”——HTTP 请求经过 Windows 内核层时已发生转换**
最常被漏掉的一点:升级 PHP 后,务必重启 Apache 服务(不是重载配置),否则旧进程仍在内存中运行,php-cgi.exe 的漏洞代码依然活跃。



















