2013-05-26 131 views
0

我的应用程序在其GUI上显示IP地址和密码。密码会定期更改(对于每个连接到它的新用户),并且只能由连接的人员使用一次,以确保它们连接到正确的设备。例如,两个彼此相邻的朋友想要使用我的应用程序,一个查看服务器的密码,以确保它们不会意外地使用附近的应用程序连接到另一个人。我应该担心密码安全吗?

用户还可以与其他设备“配对”,在这种情况下,系统会要求他们输入一次密码,服务器用户会被要求确认配对过程,然后再次不需要密码。我通过在数据库中保留一个新的随机生成的密码和另一个用户的MAC地址来做到这一点。

目前我使用String s存储和比较我的应用程序中的任何地方的密码。我读过使用char数组来存储密码对于安全性更好,因为您不必担心内部池将密码保存在内存中。

对于我的用例,我真的需要担心这种安全吗?我没有处理任何用户敏感信息,我只是喜欢有一个安全网。

旁边的问题,如何在Swing GUI上显示保存在char数组中的密码,而无需将其转换为String

+0

要回答侧面的问题:你不要。您可以显示多个子弹,星号或其他点来表示密码,或者根本不显示任何内容。你不应该显示任何安全敏感的东西的实际内容。 – AJMansfield

回答

1

恕我直言,使用字符数组只会给你一种更好的安全感。如果有人可以物理访问您的计算机及其内存,则使用String或char数组不会产生巨大影响。

回答你问的问题。问题不是interned字符串池,因为你不会实习你的随机生成的字符串。问题在于STrings是不可变的,因此一直保存在内存中,直到垃圾回收没有任何(理智的)重新设置其内容的方式。 char数组的所有元素在不再需要时可以重置为0。

关于如何显示密码而不将其转换为字符串,您可以直接在JComponent上直接绘制每个字符。但是,如果你准备好在屏幕上显示密码,那么考虑将密码保留在内存中,这对我来说是非常矛盾的。

+0

“但是如果你准备好在屏幕上显示密码,那么考虑将密码保留在内存中的某个地方对我来说是非常矛盾的。”这正是我的想法。 – Logan

1

安全的主要目的是避免权限升级。基本上每个进程都有一组允许他们执行的事情,您需要确保有权访问某个资源的人不能使用它来访问另一个资源。

在你的情况下,主要问题是“程序通过访问密码获得什么?”。如果主应用程序已经显示了所有相关信息,那么通过嗅出密码,流氓程序(可访问您的内存空间)是否有任何收获?

如果您正在使用在线流程,答案可能是肯定的。掌握某人的意思Dropbox密码具有价值,即使我已经拥有对本地计算机的广泛访问权限。然而,如果你正在谈论一个本地应用程序,他们可能没有什么可以通过嗅探密码获得。

相关问题