0

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

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

目前,我使用Strings 来存储和比较应用程序中各处的密码。我读过使用char数组存储密码更安全,因为您不必担心实习生池将密码保存在内存中。

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

附带问题,如何在charSwing GUI 上显示保存在数组中的密码而不将其转换为String无论如何?

4

2 回答 2

1

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

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

如果您使用的是在线流程,答案可能是肯定的。即使我已经拥有对本地计算机的广泛访问权限,获取某人所说的 Dropbox 密码也是有价值的。但是,如果您谈论的是本地应用程序,他们可能无法通过嗅探密码获得什么好处。

于 2013-05-26T17:31:09.157 回答
1

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

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

关于显示密码而不将其转换为字符串的方式,例如,您可以简单地直接在 JComponent 上绘制每个字符。但是,如果您准备在屏幕上显示密码,那么想到密码隐藏在内存中的某个地方对我来说是非常矛盾的。

于 2013-05-26T17:26:31.907 回答