如何防止 Apache/PHP 在 phpinfo() 中显示环境变量部分?

Tim*_*ord 4 php environment-variables php.ini apache-2.2

我需要防止用户使用 phpinfo() 意外暴露存储在环境变量中的私有数据。有没有办法配置 apache 或 php.ini 以禁止使用 phpinfo 呈现的部分?

Kev*_*Kev 6

phpinfo()显示的信息有点全有或全无。您可以告诉phpinfo()限制要显示的信息,但您必须相信您的用户会正确调用该函数:

http://php.net/manual/en/function.phpinfo.php

您可以使用文件中的disable_functions指令完全禁用该功能php.ini

http://www.php.net/manual/en/ini.core.php#ini.disable-functions

例如:

disable_functions = phpinfo
Run Code Online (Sandbox Code Playgroud)

如果你喜欢冒险,你可以获取 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();
}
Run Code Online (Sandbox Code Playgroud)