php -i | grep disable_functions仅显示配置项内容,不能验证真实生效状态;需结合php --ini确认加载路径、检查fpm的php_admin_value[disable_functions]覆盖、并用php -r实测exec/system等函数调用结果是否为空/null,同时必须关闭expose_php防phpinfo彩蛋绕过。

php -i | grep disable_functions 能看到但不等于生效
直接执行 php -i | grep disable_functions 只显示配置项内容,不能反映真实运行时状态。它可能输出空、显示默认值,或列出一堆函数——但你得确认这行配置是否被加载、是否被更高优先级配置覆盖。
CLI 模式下,PHP 加载的是独立的 php.ini(路径由 php --ini 显示),和 Web 环境完全无关;FPM 下还要看 www.conf 里的 php_admin_value[disable_functions],它会强制覆盖 php.ini 中同名设置。
- 用
php --ini查 CLI 实际加载的 ini 路径,编辑对应文件再检查 - 用
php-fpm -t && systemctl restart php*-fpm确保 FPM 配置重载生效 - 别信
function_exists('exec'):返回 false 只说明函数不可见,不代表禁用成功;有些环境会保留函数声明但拦截调用,必须实测
用 php -r 实测 exec/system 是否真能跑命令
静默失败才是最危险的情况:exec('id') 返回空数组、system('whoami') 无输出、shell_exec('ls') 返回 null —— 这些都不是代码写错了,而是函数被禁用后 PHP 不报错也不提示。
真正有效的验证方式是绕过封装,直击底层行为:
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
-
php -r "var_dump(exec('id'));"—— 看输出是否为字符串或空数组 -
php -r "var_dump(system('echo hello'));"—— 注意 system() 会直接输出到终端,返回值是最后一条命令的退出码 -
php -r "var_dump(shell_exec('pwd'));"—— 返回 null 即大概率被禁 - 如果全部返回空/NULL/0 且无错误,基本可断定
exec,system,shell_exec均被disable_functions屏蔽
proc_open 是唯一可靠 fallback,但也要防被连带禁用
proc_open() 是 PHP 8.3 官方推荐替代方案,它不在默认禁用列表里,且支持捕获 stderr、设置超时、避免 shell 注入。但它不是绝对安全的保险丝——部分高加固环境会主动把它加进 disable_functions。
验证它是否可用,不能只查函数存在性,得看能否真正建进程:
php -r "$p = proc_open('id', [['pipe','r'],['pipe','w'],['pipe','w']], $io); var_dump(is_resource($p)); proc_close($p);"- 输出
bool(true)表示可用;bool(false)或警告说明也被禁了 - 若可用,进一步测试是否能读取输出:
php -r "$p = proc_open('echo test', [...], $io); echo stream_get_contents($io[1]); proc_close($p);"
Web 环境要额外验证 phpinfo 彩蛋是否关闭
即使 disable_functions 里写了 phpinfo,攻击者仍可能通过 URL 参数触发彩蛋:?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000。这不是函数调用,而是 PHP 内部机制,disable_functions 完全无效。
必须单独确认 expose_php = Off 已生效:
-
php -i | grep expose_php输出必须是expose_php => Off - 在 Web 环境中发起请求:
curl -I 'http://localhost/?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000',响应头应不含Content-Type: text/html,理想是 404 或 400 - 这个开关一旦漏掉,前面所有函数禁用都形同虚设
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










