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

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

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

答案1

显示的信息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

如果您喜欢冒险,可以获取 PHP 源代码,破解呈现环境变量的部分,然后重新编译。例如,在 PHP 5.3.6 中,可以在第/ext/standard/info.c950 行左右找到相关代码:

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),显示一些敏感信息。

相关内容