Apache-2.2
如何防止 Apache/PHP 在 phpinfo() 中顯示環境變數部分?
我需要防止使用者使用 phpinfo() 意外暴露儲存在環境變數中的私有數據。有沒有辦法配置 apache 或 php.ini 以禁止使用 phpinfo 呈現的部分?
顯示的資訊
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(); }