php 8.1.29 已修复 cve-2024-4577 漏洞,本身不存在命令执行漏洞;低于该版本且在 windows 下启用 php-cgi、使用简体/繁体中文或日文区域设置的环境存在远程代码执行风险。

PHP 8.1.29 已修复 CVE-2024-4577 漏洞,本身**不存在命令执行漏洞**。但如果你当前运行的是 低于 8.1.29 的 PHP 8.1 版本(例如 8.1.25、8.1.28),且部署在 Windows 系统上、使用简体中文(代码页 936)、繁体中文(950)或日文(932)区域设置,并启用了 PHP-CGI 模式(如 XAMPP 默认配置),那么就处于 CVE-2024-4577 的影响范围内——攻击者可绕过防护,实现远程代码执行(RCE)。
确认是否真受影响
先验证实际风险,避免误判:
- 运行 php -v,确认版本是否
- 检查 Web 服务器是否通过 php-cgi.exe 处理请求(如 URL 中出现 /php-cgi/php-cgi.exe 或 Apache 配置含 ScriptAlias /php-cgi/)
- 查看系统区域设置:控制面板 → 区域 → 管理 → 更改系统区域设置 → 确认当前设为“中文(简体,中国)”等对应代码页
禁用 PHP-CGI 是最直接有效的临时防护
该漏洞仅在 CGI 模式下触发。只要不走 php-cgi.exe 入口,攻击链就无法成立:
- 对于 XAMPP 用户:编辑 C:/xampp/apache/conf/extra/httpd-xampp.conf,找到 ScriptAlias /php-cgi/ "C:/xampp/php/" 这一行,前面加 # 注释掉,然后重启 Apache
- 若使用其他集成环境(如 WampServer),查找类似 ScriptAlias 或 AddHandler 关联 php-cgi.exe 的配置并禁用
- 生产环境建议改用 mod_php(Apache 模块模式)或 php-fpm(Linux 常见),二者均不受此漏洞影响
Web 服务器层添加请求拦截规则
适用于暂时无法修改配置、又必须保留 CGI 的场景(效果有限,仅对特定语系起作用):
- Apache 用户可在 .htaccess 或虚拟主机配置中加入:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? - [F,L]
- 该规则会拒绝所有以 %ad(软连字号的 URL 编码)开头的查询字符串请求,覆盖大部分已知攻击载荷
- 注意:它不能防御其他编码变体或非 QUERY_STRING 入口的利用方式,仅作辅助缓解
关闭关键 CGI 配置项(需配合重启服务)
即使保留 CGI,也可削弱攻击面:
- 编辑 php.ini,确保以下两项为禁用状态:
cgi.force_redirect = 1
cgi.redirect_status_env = ""
- 同时确认 allow_url_include = Off(虽然漏洞可绕过此项,但关闭仍能阻断部分利用链)
- 修改后务必重启 Web 服务使配置生效
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











