StringPool中的字符串如何不安全?

时间:2015-03-04 05:06:23

标签: java string security passwords jvm

建议将密码存储在char []而不是String中,因为字符串存储在StringPool中。 Read more here

根据this question StringPool中的字符串不能直接使用。 要在Stringpool中获取字符串,我们需要一个密码字典来在StringPool中检查它们。如果我们有一个密码字典,我们不需要担心StringPool,我们无论如何都可以直接尝试密码字段。

那么,为什么我们不应该使用“String”作为密码的数据类型?

编辑:

获得的答案是:我们可以访问内存转储并访问stringpool中的字符串。

跟进问题:

  • 如何访问内存转储?
  • 可以阻止访问吗?
  • 如果阻止访问内存转储,使用String作为密码类型是否安全?

1 个答案:

答案 0 :(得分:0)

String在java中是不可变的并存储在String池中。 一旦它被创建,它将保留在池中,直到除非收集垃圾,所以即使我们已经完成了密码,它在内存中可用的时间更长,并且没有办法避免它。这是一个安全风险,因为任何有权访问内存转储的人都可以找到明文密码。

如果我们使用char数组来存储密码,我们可以在完成后将其设置为空白。因此,我们可以控制内存中可用的时间,以避免使用String

的安全威胁