安全的php主机名信息 - $ _SERVER ['HTTP_HOST']替代方案

时间:2011-02-17 01:54:11

标签: php security xss globals

我有一个面向公众的调试脚本,我只想在某些开发盒上运行,我希望通过检测服务器的ip或名称在这个脚本中以编程方式执行此操作 -

所以我对$ _SERVER和$ _SERVER ['HTTP_HOST']的安全性有一个疑问。

从这个:http://shiflett.org/blog/2006/mar/server-name-versus-http-host博客文章我收集到这个var非常不安全,不可信任。

从php中找出您目前所在的框的最佳方法是什么?

我想过使用 FILE ,因为这似乎非常安全,但我不确定我是否只从文件路径获得了足够的信息。

我不一定需要服务器名称,即使ip也没关系。

提前感谢。

4 个答案:

答案 0 :(得分:2)

最好的方法是通过在其上放置环境配置文件并检查它来显式定义机器:

if (file_exists('environment.php')) {
    include 'environment.php';
}

此文件可能只包含您所使用的计算机的名称,或者$debug = 0等配置设置或您要为特定计算机自定义的任何其他设置。

答案 1 :(得分:2)

最佳方式?这取决于您对环境的控制程度。以下是一些选项:

  1. 通过网络服务器设置环境变量以指示框。

    if (getenv('env_server') == 'production')
    

    这很好,因为没有你需要担心的文件。只是网络服务器配置。

  2. 在服务器上的“已知”位置设置文件,并检查(整个服务器的一个文件)。

    require('/path/to/environment.php');
    

    该文件应定义一个常量来确定环境。

  3. 手动配置服务器的每个应用程序。这是最容易做到的,因为它在服务器端不需要任何东西,但它也是最不方便的,因为你需要手动配置每个安装......

  4. 用于访问网站的外部IP地址:

    $_SERVER['SERVER_ADDR']

    这很好,因为它不需要在服务器端进行额外配置。但它需要您保留所有活动IP地址及其绑定的服务器的映射(特别是因为超过1个IP可以指向同一服务器)...

答案 2 :(得分:0)

  

从php中找出你目前在哪个方框的最佳方法是什么?

$_SERVER["SERVER_NAME"]通常没问题。 Chris概述的安全问题需要非常非常具体的工作环境。

$_SERVER["SERVER_ADDR"]也是另类选择。

除此之外,如果有机会从路径中获得提示,我倾向于选择__FILE__

答案 3 :(得分:0)

您可以使用exec()运行shell命令。

echo exec('hostname');

这可以获得OS X上的IP地址,可能是特定于平台的。

echo exec('ifconfig | grep "inet " | grep -v 127.0.0.1 | cut -d\  -f2');