gpt4 book ai didi

php - Windows环境变量与配置文件

转载 作者:可可西里 更新时间:2023-11-01 10:38:59 25 4
gpt4 key购买 nike

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

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

我自己一直在使用配置文件,所以我考虑了优点/缺点。我看不出按照他们的方式去做有什么好处,但我确信我没有正确考虑它。

这是我的看法:

缺点

  1. 任何获得 Windows 机器访问权限的人都可以直接进入 Windows 环境变量并查看它们。

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

优点

  1. 从开发机器转移到质量检查机器,再转移到生产机器时,无需更改应用程序配置文件,因为每个服务器都已在环境变量中设置了必要的数据。 (我不必“记住”使用正确的配置文件,因为已经为每个服务器设置了环境变量)。

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

你的观点是什么?

最佳答案

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

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

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

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

正如 paulsm4 所建议的那样,通过加密来混淆这一点将防止任何具有随意读取访问权限的人看到这些数据。 但是,这不是一种安全机制,因为我们应该假设任何有权访问 config.php 文件的人也可以访问读取和解码这些参数的脚本,并且可以简单地重新设计这个程序。

事实上,在我的应用程序中,我使用了一种略有不同的方法,我将其作为示例。我在小型 index.php Bootstrap 中使用定义(应用程序是 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();

这是为开发人员构建的,我的测试虚拟机,并通过安装脚本进行生产,该脚本进行了一些编辑以将此敏感信息插入到 APPROOT/index.php 中,因此我不需要将此敏感信息保留在我的git 存储库。

关于php - Windows环境变量与配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9441376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com