2012-02-25 164 views
1

有一個我正在處理的Web應用程序。它是基於Apache Web服務器的PHP。Windows環境變量與配置文件

在生產服務器應用翻出一些「敏感」的信息,如從Windows環境變量的密碼數據庫,數據庫的用戶名。這樣做不是將信息放入應用程序中的配置文件中。

我一直在使用配置文件自己,所以我想到了優勢/劣勢。我沒有看到他們這樣做的方式帶來了很多收益,但我確信我沒有正確地考慮它。

這是我的看法:

缺點

  1. 是任何人都能夠訪問到Windows機器可以直接進入Windows環境變量,看看他們無論如何。

  2. 更改信息不能在不關閉服務器來完成。有些情況下我們已經改變了環境變量,並且必須完全關閉apache才能完全重新加載新的值。

優勢

  1. 當從開發移動,進行質量檢查,以督促機應用程序配置文件沒有被改變,因爲每個服務器將在環境中已設置了必要的數據變量。 (我不必'記住'使用正確的配置文件,因爲已經爲每個服務器設置了環境變量)。

  2. 能加強安全性因此,只有管理員可以實際看到的環境變量。不知道如果Windows可以做到這一點,但我確定有一些註冊表編輯可以允許這樣做。

你的觀點是什麼?

回答

1

你真正談論的是訪問敏感信息的控制,而要做到這一點的最好辦法是使用內置於底層操作系統的_access_control_機制。在我看來,你不能在Apache級別使用環境變量有效地做到這一點,所以我覺得很難想到任何令人信服的優點,這將使我支持這個選項。

你可以用一個文件來存儲內容,例如做一個config.php文件具有適當的訪問控制。將該文件的範圍限制爲僅設置這個有限數量的要保護的參數。

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

這隻能被服務器上有讀取權限的服務器上的用戶破解。(即使這是在一個可以通過網絡訪問的目錄中,通過URI訪問這個信息並不會顯示這個信息,你會看到爲什麼嗎?)

由於paulsm4建議通過加密來模糊這一點, 。 但是,這不是一個安全機制,因爲我們應該假設任何有權訪問config.php文件的人也可以訪問讀取和解碼這些參數的腳本,並且可以簡單地重新設計此過程。

實際上,在我的應用程序中,我使用了一個稍微不同的方法,我舉例說明。我用的定義(該應用程序是OO OO,不使用全局變量)在一個小的index.php引導和保持所有其他配置數據在我的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的,我的測試虛擬機,並通過一個安裝腳本prod,它有一些編輯插入這個敏感的信息到APPROOT/index.php,所以我不需要保存這個敏感信息在我的git存儲庫。

+0

你明白了爲什麼?那麼,Apache將仍然「服務」它的權利?但由於該腳本設置PHP變量,並沒有打印任何東西,他們什麼都看不到? 如果它是一個文本配置文件,那麼它將在公共目錄中看到。 – 2012-02-29 04:45:02

0

我會選擇何者更操作性方便你(這聽起來像環境變量,使您的生活更輕鬆 - 然後去了)......

...然後加密文本串。

+0

好吧,對,都可以很方便。但我正在尋找各自的優點和缺點。 – 2012-02-25 06:50:23

0

假設的Windows NT架構(8,7,Vista中,XP ...)

如果用戶A的用戶環境變量 「密碼」,然後用戶B(誰不是管理員)無法讀取用戶A的用戶環境變量「PASSWORD」,所以只要用戶B不是管理員就是安全的。

您應該以不同的用戶身份運行您的不同程序。

您還應該保護對計算機的物理訪問。