2011-11-19 70 views
22

我正在開發一個從數據庫讀取數據的應用程序。 與db的連接通過標準的登錄/密碼機制來執行。Java - 如何存儲應用程序中使用的密碼?

問題是:如何存儲數據庫密碼? 如果我將它作爲類成員存儲,則可以通過反編譯操作輕鬆地檢索它。

我認爲混淆並不能解決問題,因爲在混淆代碼中也可以很容易地找到字符串密碼。

有人有建議嗎?

+2

它是您的數據庫還是客戶的數據庫。如果是客戶的數據庫,他應該知道它的密碼。如果它是您的數據庫,它位於何處?爲什麼客戶應用程序會直接訪問數據庫,而無需通過某些存儲密碼的服務器,以及客戶端無法使用字節碼? –

+1

我通常將它作爲用Rot13加密的字符串存儲在我的應用程序中。 (開玩笑)。 –

+0

如果你使用的是Java EE,有一些標準的機制來處理這個......但我想你不是。如果您的應用程序提供了對數據庫的完全訪問權限,我不認爲它有助於隱藏密碼。 – toto2

回答

20

不要將密碼硬編碼到代碼中。這是在那裏長大最近Top 25 Most Dangerous Programming Mistakes

硬編碼一個祕密帳戶和密碼進入你的軟件非常方便 - 熟練反向工程師。如果所有軟件的密碼相同,那麼當密碼不可避免地變爲已知時,每個客戶都會變得易受攻擊。而且因爲它是硬編碼的,所以修復這是一個巨大的痛苦。

您應該將配置信息(包括密碼)存儲在應用程序在啓動時讀取的單獨文件中。這是防止密碼因反編譯而泄漏的唯一真正方法(從不將它編譯到二進制文件中開始)。

查看更詳細的解釋這個精彩的回答:By William Brendel

0

對於一個小而簡單的應用程序,你不想涉及到很多其他安全措施,這也許應該是一個配置選項。在部署應用程序時,它可以讀取指定了數據庫連接屬性的配置文件。這意味着應用程序本身不知道密碼,但您需要訪問服務器才能找到密碼。

0

某些數據應該是可配置的。就像你剛纔所說的那樣,它可能是usernamepassword或一些常見的datas;通常我們要做的是創建一個屬性配置頁面。我以前的做法是使用XML文件,保持password/username的格式爲encrypted。您可以輕鬆解析XML以檢索連接密碼。

這確保了您的密碼隨時可以更改的可靠性。這不僅僅指密碼。而是您使用的任何數據,這些數據將不時進行配置。

相關問題