应禁用phpinfo()函数、删除测试文件、限制Web服务器访问、关闭错误显示并采用输出缓冲替代方案。具体包括修改php.ini禁用函数、清理phpinfo.php等文件、配置Apache/Nginx访问控制、关闭display_errors及用ob_start捕获写入安全日志。

如果您在生产环境中运行 phpinfo() 函数,页面将直接输出 PHP 运行环境的完整配置详情,这会导致大量敏感信息被未授权访问者获取。以下是针对该风险的具体防护措施:
一、禁用 phpinfo() 函数
通过修改 PHP 配置文件,彻底阻止该函数被调用,是最根本的防御手段。此操作可使所有脚本中对 phpinfo() 的调用立即失效。
1、打开服务器上的 php.ini 文件。
2、定位到 disable_functions 行,若该行被注释则取消注释。
立即学习“PHP免费学习笔记(深入)”;
3、在已有函数列表末尾添加 phpinfo,多个函数间用英文逗号分隔,例如:disable_functions = exec,passthru,shell_exec,system,phpinfo。
4、保存文件并重启 Web 服务(如 Apache 或 Nginx)使配置生效。
二、删除或重命名测试文件
开发者常上传 phpinfo.php 用于环境验证,但上线后未清理,成为固定攻击入口。移除该文件可消除最常见泄露路径。
1、使用 find 命令扫描 Web 根目录下所有疑似文件:find /var/www/html -name "phpinfo.php" -o -name "info.php" -o -name "test.php" -type f。
2、对搜索结果逐一确认内容是否含 phpinfo() 调用。
3、确认后执行删除操作:rm -f /path/to/phpinfo.php。
4、若需保留调试能力,可将文件重命名为非公开可猜路径(如随机字符串),并禁止目录索引。
三、限制 Web 服务器访问权限
即使 phpinfo() 函数未被禁用,也可通过 Web 服务层拦截请求,仅允许可信来源访问。
1、对于 Apache,在对应站点目录下创建或编辑 .htaccess 文件。
2、添加如下规则,仅允许本地回环地址访问:Require ip 127.0.0.1 ::1。
3、对于 Nginx,在 server 块中添加 location 段:location ~ ^/(phpinfo|info)\.php$ { deny all; }。
4、重载配置:sudo systemctl reload apache2 或 sudo nginx -s reload。
四、禁用错误信息前端显示
display_errors 启用时,PHP 错误堆栈可能间接暴露 phpinfo() 所在路径或配置片段,需同步关闭。
1、在 php.ini 中查找 display_errors 行。
2、将其值设为 Off:display_errors = Off。
3、同时确保 log_errors = On,并指定 error_log 路径供管理员审计。
4、若使用 .user.ini 或 .htaccess 控制,Apache 下可加:php_flag display_errors off。
五、输出缓冲替代方案
开发阶段确需查看配置时,可避免直接输出至浏览器,改用缓冲捕获后定向写入受限日志文件。
1、新建 debug_info.php,内容以 ob_start() 开始:ob_start(); phpinfo(); $info = ob_get_contents(); ob_end_clean();。
2、将 $info 写入非 Web 可访问路径,如 /tmp/php_debug_$(date +%s).log。
3、设置文件权限为 600:chmod 600 /tmp/php_debug_*.log。
4、通过 SSH 登录后 cat 查看,不对外提供 HTTP 接口。











