2011-11-19 43 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以检索连接密码。

这确保了您的密码随时可以更改的可靠性。这不仅仅指密码。而是您使用的任何数据,这些数据将不时进行配置。

相关问题