是,phpinfo() 默认输出全部PHP配置、扩展、环境变量和服务器信息,包含DOCUMENT_ROOT、SCRIPT_FILENAME、已启用扩展、php.ini路径、环境变量及$_ENV/$_SERVER中的密钥等敏感内容,极易被攻击者利用。

会,phpinfo() 默认输出全部 PHP 配置、扩展、环境变量和服务器信息,其中包含大量敏感数据,**不应在生产环境暴露**。
哪些信息属于敏感内容
phpinfo() 页面中直接可见的敏感项包括:
-
$_SERVER数组里的DOCUMENT_ROOT、SCRIPT_FILENAME、HTTP_HOST、REMOTE_ADDR等 —— 可推断目录结构与访问来源 - 已启用的扩展列表(如
pdo_mysql、redis)—— 暴露技术栈,辅助攻击者选择利用链 -
Loaded Configuration File显示php.ini路径 —— 攻击者可尝试读取该文件(若 Web 服务配置不当) -
Environment区域可能含PATH、HOME、自定义环境变量(如数据库密码误设在环境变量中) -
PHP Variables下的$_ENV和$_SERVER若未清理,可能泄露密钥、API Token 等
常见错误使用场景
以下做法极易引发风险:
- 为“临时调试”在网站根目录放一个
info.php,写入,上线后忘记删除 - 用 Nginx/Apache 的 location 规则仅限制 IP 访问,但规则配置错误(如正则未锚定、路径匹配宽松),导致绕过
- CI/CD 流程中自动部署时,模板或脚本意外将
phpinfo()文件带入生产镜像 - 某些旧版 CMS 或安装向导残留
phpinfo()页面(如/install/phpinfo.php),未被清理
安全替代方案与加固建议
如需检查运行时配置,优先采用更可控的方式:
立即学习“PHP免费学习笔记(深入)”;
- 用
ini_get('display_errors')、extension_loaded('opcache')等函数按需查询单个配置或状态,而非全量输出 - 通过命令行查看:执行
php -i(本地运维)或php -m(查扩展),避免 Web 暴露 - 若必须保留 Web 端入口,务必加访问控制:
– Nginx 示例:location /phpinfo.php { allow 192.168.1.100; deny all; }
– 并确保文件名不规律(如syschk_8a3f.php),且不在版本库中 - 上线前扫描工具检查:
grep -r "phpinfo" . --include="*.php",确认无残留调用
真正危险的不是 phpinfo() 本身,而是它把本该隔离的内部视图,毫无遮拦地交到了外部请求手里。哪怕只开放 5 分钟,也可能被自动化扫描器捕获并存档。











