最安全做法是直接禁用phpinfo(),因其输出由内核硬编码生成,php.ini配置无法过滤字段,且字符串替换不可靠;应通过disable_functions禁用并删除所有phpinfo.php类文件。

直接禁用 phpinfo() 是最安全的做法,不建议只“移除字段”——因为函数本身会暴露服务器结构、扩展版本、路径等敏感信息,且无法通过配置精准过滤字段。
为什么不能靠 php.ini 配置隐藏 phpinfo 内容
phpinfo() 的输出由 PHP 内核硬编码生成,disable_functions 可以禁用它,但 expose_php、display_errors 等配置对 phpinfo() 输出内容完全无效。试图用 ob_get_contents() + 字符串替换来“过滤字段”,不仅不可靠(输出格式可能随 PHP 版本变化),还会因执行时已加载全部环境信息而失去意义。
正确禁用 phpinfo() 的两种方式
优先选择以下任一方式,确保函数调用直接失败:
- 在
php.ini中添加:disable_functions = phpinfo
,然后重启 Web 服务(如systemctl restart apache2或systemctl restart php-fpm) - 若使用 FPM 模式且有 pool 级控制权限,可在对应 pool 的配置文件(如
/etc/php/8.2/fpm/pool.d/www.conf)中加:php_admin_value[disable_functions] = phpinfo
验证是否生效:
立即学习“PHP免费学习笔记(深入)”;
线上环境发现 phpinfo.php 文件怎么办
这不是配置问题,是部署风险。必须立即处理:
- 搜索并删除所有类似命名的文件:
find /var/www -name "*phpinfo*.php" -o -name "info.php" -o -name "test.php"
- 检查 Web 日志,确认是否已被扫描或访问过:
grep -i "phpinfo\|info\.php" /var/log/apache2/access.log
- 若该文件曾被公开访问,需假设服务器指纹、PHP 版本、已启用扩展(如
curl、gd)等信息已泄露,应同步检查是否存在对应 CVE 可利用点
真正麻烦的不是“怎么删字段”,而是禁用后仍有人通过其他方式(如错误回显、备份文件、Git 泄露)拼凑出等效信息——phpinfo() 只是冰山露出水面的那一角。











