Windows环境变量与配置文件

时间:2012-02-25 04:56:50

标签: php windows apache

我正在开发一个网络应用程序。它是基于PHP的Apache Web服务器。

在生产服务器中,应用程序会从Windows环境变量中提取一些“敏感”信息,例如数据库的密码和数据库用户名。这样做不是将信息放入应用程序中的配置文件中。

我自己一直在使用配置文件,所以我想到了优点/缺点。我没有看到他们这样做的好处,但我确信我没有正确地考虑它。

这是我的看法:

缺点

  1. 任何可以访问Windows机器的人都可以进入windows环境变量并查看它们。

  2. 如果不关闭服务器,则无法更改信息。有些情况下我们已经更改了环境变量,并且必须完全关闭apache才能完全重新加载新值。

  3. 优点

    1. 当从dev,qa移动到prod机器时,不必更改app配置文件,因为每个服务器都已经在环境变量中设置了必要的数据。 (我不必“记住”使用正确的配置文件,因为已经为每个服务器设置了环境变量。)

    2. 可以收紧安全性,只有管理员才能真正看到环境变量。不确定Windows是否可以这样做,但我确定有一些注册表编辑可以允许这样做。

    3. 你的观点是什么?

3 个答案:

答案 0 :(得分:1)

您真正谈论的是对敏感信息的访问控制,最好的方法是使用底层操作系统内置的_access_control_机制。在我看来,你无法在Apache级别有效地使用环境变量,所以我发现很难想到任何引人注目的优势,这会使我支持这个选项。

您可以使用文件存储内容,例如具有适当访问控制的config.php文件。将此文件的范围限制为仅设置要受保护的有限数量的参数,例如

<?php
$DBuser   = "abd";
$DBpasswd = 'fred:ere12#';

只有服务器上具有该文件读取权限的人才能破解这一点。 (即使这是在Web可访问的目录中,通过URI访问它也不会显示此信息。你知道为什么吗?)

正如paulsm4建议通过加密对此进行模糊处理将阻止任何具有随意读取权限的人查看这些数据。 然而,这不是一种安全机制,因为我们应该假设有权访问config.php文件的任何人也可以访问读取和解码这些参数的脚本,并且可以简单地重新设计这个过程

事实上,在我的应用程序中,我使用了一种稍微不同的方法,我将其作为示例。我在一个小的index.php引导程序中使用了定义(应用程序是OO OO并且不使用全局变量)并将所有其他配置数据保存在我的D / B中

<?php
define( 'SQL_CONTEXT', 'DB:user:pwd:tableprefix' );
define( 'ROOT_DIR', dirname(__FILE__) );
define( 'START_TIME', microtime() );
// a couple of other app-specific defines go here

if( ( @include( "./_cache/dispatcher.class.php" ) ) != 1 ) {
    require("./_include/functions.php");
}

Dispatcher::dispatch();

这是针对dev,我的测试VM和prod的安装脚本,它有一些编辑器将这些敏感信息插入到APPROOT / index.php中,因此我不需要将这些敏感信息保存在我的 git 存储库。

答案 1 :(得分:0)

我会选择更方便的操作(听起来环境变量会让你的生活更轻松 - 然后去吧)......

...然后加密文本字符串。

答案 2 :(得分:0)

假设Windows NT架构(8,7,Vista,XP ......)

如果用户A具有USER环境变量“PASSWORD”,则用户B(非管理员)无法读取用户A的USER环境变量“PASSWORD”,因此只要用户B不是Admin,它就是安全的。

您应该以不同的用户身份运行不同的程序。

您还应该保护对计算机的物理访问。