修复PHP代码执行漏洞需配置、编码、环境三层面协同设防:禁用eval、assert、system等危险函数;杜绝用户输入参与动态代码拼接;收紧php.ini中allow_url_include、open_basedir、display_errors等配置;并立即升级至8.2.35/8.3.36/8.4.27/8.5.12及以上版本。

修复PHP代码执行漏洞,核心是切断“用户输入 → 动态解析执行”的路径。不能只靠某一种手段,而要从配置、编码、运行环境三层面协同设防。
禁用危险函数是第一道硬屏障
在 php.ini 中启用 disable_functions,直接屏蔽高危函数调用:
- 明确列出:
disable_functions = eval,assert,system,exec,passthru,shell_exec,popen,proc_open,unserialize - 注意:
unserialize()虽非直接执行函数,但配合魔术方法(如__wakeup、__destruct)极易触发RCE,必须禁用 - 修改后需重启Web服务(如
systemctl restart php-fpm或apache2)才生效
杜绝动态代码拼接的开发习惯
代码执行漏洞多数源于开发者主动引入风险,而非PHP本身缺陷。关键原则是:永远不把用户输入当作代码来执行。
- 彻底避免使用
eval()和assert()处理任何含用户数据的字符串 - 不用动态函数调用:
$func = $_GET['action']; $func();这类写法必须重构为白名单分发(如switch($_GET['action']) { case 'list': listData(); break; }) - 文件包含必须用固定路径或严格白名单:
include 'pages/' . in_array($page, ['home','about']) ? $page : '404' . '.php';
收紧PHP运行时配置
php.ini 中多个选项能大幅压缩攻击面,尤其对未及时升级的老版本至关重要:
立即学习“PHP免费学习笔记(深入)”;
-
allow_url_include = Off(默认已关)—— 阻断远程文件包含(RFI) -
open_basedir = /var/www/html/—— 限制PHP脚本能访问的文件系统范围 -
display_errors = Off+log_errors = On—— 防止错误信息泄露路径、版本等敏感上下文 - 针对近期高危漏洞(如CVE-2026-109619),若暂无法升级,可临时关闭会话上传进度:
session.upload_progress.enabled = 0
升级到官方修复版本是根本解法
2026年10月曝出的php2shell系列漏洞(CVE-2026-109618/109619)已确认影响所有8.2–8.5旧版,且PoC广泛传播。仅靠配置缓解无法根除风险。
- 立即检查当前版本:
php -v(CLI)和php-fpm -v(Web服务,可能不同) - 受影响版本必须升至:8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 及以上
- 下载地址以PHP官网为准:https://www.php.cn/link/a232176a129c157a9e406cabbd1d9bc6



















