【问题标题】:PHP Apache phpinfo hide environment variablesPHP Apache phpinfo 隐藏环境变量
【发布时间】:2011-09-20 18:30:30
【问题描述】:

是否可以从phpinfo中混淆或删除环境变量?

如果不是,是不是只能显示phpinfo函数?

进一步考虑,有人可以轻松地 print_r($_SERVER) 并获得凭据。有什么办法可以解决这个问题?

澄清 这是关于 Apache 环境变量的。

【问题讨论】:

  • 作为一个反驳点,IMO,在服务器上创建和运行上述代码的能力比print_r($_SERVER) 的输出具有更深远的意义。

标签: php apache obfuscation phpinfo


【解决方案1】:

Suhosin patch 这样做:

忽略具有以下名称的 GET、POST、COOKIE 变量: 全球、_COOKIE、_ENV、_FILES、_GET、_POST、_REQUEST _SERVER、_SESSION、HTTP_COOKIE_VARS、HTTP_ENV_VARS HTTP_GET_VARS、HTTP_POST_VARS、HTTP_POST_FILES HTTP_RAW_POST_DATA、HTTP_SERVER_VARS、HTTP_SESSION_VARS

除此之外,我不知道有什么方法可以彻底隐藏这些变量。

也就是说,首先它不应该是真正必要的 - 外部访问者不应该能够运行phpinfo(),或转储任意变量。

【讨论】:

  • 启用 suhosin 并重新启动 apache 仍然允许打印出 $_SERVER。
  • @Spechal 它可能需要通过配置选项激活。可悲的是,显然,关于该主题的Wiki 不是最新的——它缺少例如我知道存在的suhosin.server.strip,并通过 $_SERVER 阻止 XSS 攻击。我目前看不到列出所有可用选项的资源,并且他们的forum 已关闭 - 抱歉
  • 担忧来自拥有数据库凭据的开发人员。这似乎很荒谬,因为他们需要凭据才能访问数据库,但上级不希望开发人员知道凭据是什么。
  • @Spechal 我明白了。但是如果环境变量被移除或者取消设置,PHP脚本就不能再使用它们了,不是吗?
  • 没错。在我看来,答案是,就我的情况而言,不会。
【解决方案2】:

您可以使用flags 参数来确定显示/省略哪些部分。

环境变量是值16。最大值为127;所以只省略环境变量,发送值111

显示所有内容

  • <?php phpinfo(); ?>
  • <?php phpinfo(127); ?>
  • <?php phpinfo(-1); ?>
  • <?php phpinfo(INFO_ALL); ?>
  • <?php phpinfo(INFO_GENERAL | INFO_CREDITS | INFO_CONFIGURATION | INFO_MODULES | INFO_ENVIRONMENT | INFO_VARIABLES | INFO_LICENSE); ?>

只显示环境变量

  • <?php phpinfo(16); ?>
  • <?php phpinfo(INFO_ENVIRONMENT); ?>

显示除环境变量之外的所有内容

  • <?php phpinfo(111); ?>
  • <?php phpinfo(INFO_ALL & ~INFO_ENVIRONMENT); ?>

常量

Name (constant)     | Value | Description
INFO_GENERAL        |  1    | The configuration line, php.ini location, build date, Web Server, System and more.
INFO_CREDITS        |  2    | PHP Credits. See also phpcredits().
INFO_CONFIGURATION  |  4    | Current Local and Master values for PHP directives. See also ini_get().
INFO_MODULES        |  8    | Loaded modules and their respective settings. See also get_loaded_extensions().
INFO_ENVIRONMENT    | 16    | Environment Variable information that's also available in $_ENV.
INFO_VARIABLES      | 32    | Shows all predefined variables from EGPCS (Environment, GET, POST, Cookie, Server).
INFO_LICENSE        | 64    | PHP License information. See also the » license FAQ.
INFO_ALL            | -1    | Shows all of the above.

文档可以在here找到

【讨论】:

  • 我很欣赏复活和怀旧,但这如何阻止超全球的输出呢?获取数据的方法太多,而且技术已经足够先进,对于使用现代最佳实践的任何人或公司来说,这都不是问题。例如多个环境、令牌、秘密等......
猜你喜欢
  • 2011-02-25
  • 1970-01-01
  • 2020-03-24
  • 2018-04-30
  • 2016-06-27
  • 2014-08-17
  • 1970-01-01
  • 2020-05-19
  • 2023-03-10
相关资源
最近更新 更多