2013-10-21 42 views
1

假设我正在编写一个Java应用程序,该程序连接到数据库以在允许应用程序运行之前对用户进行身份验证。我需要存储数据库的URL,用户名,密码和数据库名称。很明显,任何人都可以反编译应用程序并查看信息并将其用于我。即使混淆也不行。我如何可以安全地将个人信息硬编码到Java程序中?Java在分布式应用程序中安全地存储个人数据

注意:这是一个假设,所以请不要告诉我任何特定于数据库信息存储的东西。

+0

您需要使用Web服务。永远不要让用户直接访问数据库。 – SLaks

+0

就像我说的,这是一个假设。假设我需要将数据存储在应用程序中,并且不能使用PHP脚本进行身份验证。 – nrubin29

+0

如果他们想要,一切都可以被黑客入侵。如果这是一个简单的方法,那么很多程序都不会出现问题。 –

回答

0

如何使用公钥加密登录数据并将其保存到Java程序A中,并与其他人共享。 A将加密的数据传输到程序B(B在专用服务器上保密); B使用您的私钥解密信息并证明程序A连接到数据库。

+0

问题在这里:邪恶的人仍然可以修改A并使用未改变的加密密码来访问数据库。他们可能无法获得纯文本密码,但他们确实可以访问。加密的密码现在大致相当于纯文本密码。 – zapl

1

你不能。您不可能完全隐藏您提供的信息,因为您需要使用它并因此找到它。

如果您确实不想授予访问限制的用户名和密码,请不要使用远程数据库连接。相反,您可以将用户输入的登录名和密码发送到服务器应用程序,该应用程序将读取查询您的数据库。

+0

可以隐藏信息吗?我知道如何存储这些信息的唯一方法是在“字符串”中,它很容易看到。有没有办法加密硬编码的信息,或至少隐藏它? – nrubin29

+0

不,您不能将这些信息安全地存储在客户端,因为客户端必须具备解密所需的所有信息。充其量,你可以混淆它,但有一些工具可以轻松地逆转过程。听这个人的回答。他是对的。 –

0

我认为一种好的方法是将应用程序表示和逻辑分开。 应用程序仅显示使用公共暴露功能(可能是Web服务或API)检索的数据,或者您遵循Façade_pattern(服务外观或会话外观)的任何逻辑。

这可以通过使用例如RMI或EJB轻松获得。在连接到磁盘/电话上的数据库/ xml的任何逻辑部分,但是这将在外部无法访问的计算机上完成,如果不是远程调用的话。

在您的客户端(可以是Java程序,网站,电话应用程序的演示文稿)和逻辑(位于服务器上)之间可能有防火墙或您想要的任何保护。顺便说一下,在服务器端,您可以加密您的EJB(访问数据库)中的数据,但不会在外部显示。

我的意思是这是不知道事情如何实现的很好的一部分,客户端不知道远程方法在做什么,它只需要返回数据,就这些。

我认为扩大一点这个概念它可能工作,这只是一个粗略的想法。

相关问题