因此,我們的Web服務器應用程序需要連接到數據庫,並且其他一些應用程序具有在啓動時執行的啓動腳本。在啓動腳本/配置文件中存儲數據庫密碼的最佳方式是什麼?
什麼是存儲的名稱的最佳方式/密碼爲這些應用中,
- 的安全性,例如方面或許我們不希望系統管理員知道數據庫密碼
- 可維護性,例如,使密碼更改時易於更改配置等。
Windows和Linux解決方案都很讚賞!
因此,我們的Web服務器應用程序需要連接到數據庫,並且其他一些應用程序具有在啓動時執行的啓動腳本。在啓動腳本/配置文件中存儲數據庫密碼的最佳方式是什麼?
什麼是存儲的名稱的最佳方式/密碼爲這些應用中,
Windows和Linux解決方案都很讚賞!
確保密碼的最佳方式是停止使用密碼。使用可信連接: How To: Connect to SQL Server Using Windows Authentication in ASP.NET 2.0。 然後你沒有什麼可以隱藏的 - 發佈你的web.config和源碼到世界上,它們仍然無法擊中你的數據庫。
如果這不適合你,請使用內置的configuration encryption system in ASP.NET。
純文本?如果他們在你的服務器上,我希望服務器足夠安全,不允許未經授權的訪問。如果人們可以在服務器上訪問你的配置文件,那麼早就出現了問題。
澄清:在安全性,可維護性(例如,如果登錄需要改變,可我後來發現它,等)方面
@lomax:也許我可能不希望每個人都可以訪問到物理服務器(例如系統管理員)查看密碼。
謝謝!
您可以在您的二進制文件中烘焙對稱加密密鑰,並在啓動時讓該二進制文件從磁盤上的文件讀取加密的用戶名/密碼。
但是,這並不比混淆更多,因爲您的代碼可能存儲在某個源代碼倉庫中。
我會建議你更好地控制使用防火牆和專用網絡泡泡在物理和網絡上訪問您的服務器,並將密碼以明文(或base-64編碼)存儲在磁盤上將權限鎖定到您的Web應用程序的運行用戶。
您也可以鎖定數據庫服務器,只接受來自您的Web應用程序機器的IP連接。
最終,您的問題是您的數據庫密碼(您的數據庫用戶名/密碼對)需要通過Web應用程序進行編程式無人值守使用。
我同意lomaxx:如果有人已經在服務器上或有廣泛的訪問權限(如系統管理員),遊戲已經結束了。所以這個想法是使用一個你信任的服務器,它對你想要的程度是安全的。具體做法是:
除此之外,環境變量似乎是爲存儲這些類型的憑據一個流行的選擇,因爲這意味着訪問源只(例如,通過犧牲開發框)不直接揭示它,也可以是很好本地化爲每個服務器(開發,測試等)。
可以想象,Web服務器中的一個缺陷可能允許攻擊者使服務器提供一個配置文件,但仍然不允許完全訪問服務器。出於這個原因,並且因爲建立縱深防禦通常是一個好主意,您不應該將敏感數據存儲在非加密狀態。 – 2010-05-25 09:36:20
在大多數情況下,我認爲在純文本文件中混淆密碼就足夠了(例如,與base64)。您無法完全保護已存儲的密碼,使其無法通過root用戶訪問確定的系統管理員,因此完全沒有必要嘗試。然而,簡單的混淆可以防止意外地向肩上衝浪者透露密碼。
一個更復雜的方法是設置了,要麼一個專門的安全密碼服務器:
根據所使用的網絡協議,這可能無法防止使用tcpdump的惡意系統管理員。而且它也可能無法通過調試器保護確定的系統管理員。那時候,可能是時候看看Kerberos票了。
PostgreSQL在文檔中爲這種情況提供了一個nice solution。本質上,您使用ssh將計算機上的端口連接到遠程計算機上的PostgreSQL服務器端口。這有三個驗證階段:
這會降低安全性,以確定您的用戶帳戶是否安全,您的ssh配置是否正常,並且您不需要任何密碼。
編輯:我應該補充說,這將適用於偵聽TCP/IP端口的任何數據庫。它恰好在PostgreSQL中描述。你會希望iptables(或者相當於Linux)來執行端口限制。見this。
遵循這一策略會導致錯失深度構建防禦的機會。 – 2010-05-25 09:34:07