2012-10-11 103 views
9

我知道這個問題How do I secure my database connection credentials?已被要求,並回答了多次(例如How to secure database passwords in PHP?)。保護數據庫連接信息

該問題的一個普遍接受的答案是存儲網頁根目錄以外的詳細信息。但我很好奇,爲什麼這真的有很大的不同。

從我的理解,一個人無法通過HTTP下載PHP文件的源(除非你的web服務器配置不正確,但你知道這件事的時候了)。因此,除非您有權訪問PHP文件的源,否則您將無法查看憑證。糾正我,如果我錯了,但這不是基本上意味着你需要shell訪問?如果你有shell訪問權限,你能不能直接訪問web根目錄以外的文件?

如果這個問題的答案是,包括文件可能有特殊權限,不允許任何人,但與Web服務器用戶閱讀它,然後(考慮到我有shell訪問),我不能只寫(或修改)任何PHP文件只是迴應這些憑據?

所以問題是,它是否真的是否有任何區別,直接存儲在PHP腳本中的證書,而不是在Web根外的文件?

回答

8

假設,由於網絡服務器上的錯誤,Web服務器不再處理PHP文件,而是將它們視爲HTML文件。

在這種情況下,像http://mysite.com/config.php會簡單揭示你的數據庫的憑據。

所以答案是:是的,它確實很重要,在哪裏以及如何存儲數據庫憑證。

+1

是的,這實際上發生在Facebook一次! http://techcrunch.com/2007/08/11/facebook-source-code-leaked/ – fire

+0

或者防止這個bug:http://eindbazen.net/2012/05/php-cgi-advisory-cve-2012- 1823/ – Tchoupi

+0

@Dev問題是:*爲什麼我們應該在webroot之外存儲數據庫證書?*。這回答了這個問題。 – Tchoupi

5

主要問題是Web服務器可能會在稍後發生故障。例如。在軟件更新後,php可能無法正常工作,並且服務器退回到直接傳送文件。或者在軟件更新後再次重置配置,因此PHP不再註冊文件擴展名。或者服務器在重負載下崩潰,並且也開始傳遞文件。

很多事情都可能發生,而且在某些時候搞亂配置相當容易。最好保持安全,並將其放在文檔根目錄之外。

+0

非常好的一點。這更多的是我正在尋找的東西。我沒有想過軟件更新和那種搞亂配置的事情。謝謝! – Travesty3

0
  1. 爲應用程序創建的O/S的用戶,如 'UserForMyApp'

  2. 對於該用戶,創建的O/S的用戶環境變量 'MY_APP_DATABASE_PASSWORD',並將該值設置

  3. 運行你的應用程序爲「UserForMyApp」

  4. 在MyApp的,讀O/S的用戶環境變量「MY_APP_DATABASE_PASSWORD」,並用它來登錄到數據庫

其它非根用戶不能讀取爲另一個用戶的O/S的用戶環境變量。這是默認設置。與w文件權限不同,您不必設置任何內容。

無意中將密碼存儲在源代碼管理中。

如果db和app在同一臺機器上,可以讓db不需要密碼就可以信任本地訪問。