我需要防止用户使用 phpinfo() 意外泄露存储在环境变量中的私人数据。有没有办法配置 apache 或 php.ini 以禁止使用 phpinfo 呈现的部分?
答案1
显示的信息phpinfo()
要么全部显示,要么全部不显示。您可以phpinfo()
限制要显示的信息,但您必须相信用户能够正确调用该函数:
disable_functions
您可以使用文件中的指令完全禁用该功能php.ini
:
http://www.php.net/manual/en/ini.core.php#ini.disable-functions
例如:
disable_functions = phpinfo
如果您喜欢冒险,可以获取 PHP 源代码,破解呈现环境变量的部分,然后重新编译。例如,在 PHP 5.3.6 中,可以在第/ext/standard/info.c
950 行左右找到相关代码:
if (flag & PHP_INFO_ENVIRONMENT) {
SECTION("Environment");
php_info_print_table_start();
php_info_print_table_header(2, "Variable", "Value");
for (env=environ; env!=NULL && *env !=NULL; env++) {
tmp1 = estrdup(*env);
if (!(tmp2=strchr(tmp1,'='))) { /* malformed entry? */
efree(tmp1);
continue;
}
*tmp2 = 0;
tmp2++;
php_info_print_table_row(2, tmp1, tmp2);
efree(tmp1);
}
php_info_print_table_end();
}
答案2
你可以这样调用它:
phpinfo(INFO_ALL & ~INFO_ENVIRONMENT);
删除“环境”部分。
但它仍然打印PHP Variables
包含所有$_ENV
值的部分,因此
phpinfo(INFO_ALL & ~INFO_ENVIRONMENT & ~INFO_CONFIGURATION & ~INFO_VARIABLES);
把这些去掉,所以剩下的不多了。
这部分Apache Environment
可能仍然可见(如果您使用 Apache),显示一些敏感信息。