在java中取消String是一个好习惯

时间:2018-03-13 06:10:37

标签: java string

我将普通密码作为字符串存储在内存中时出现问题。根据参考资料,由于字符串是不可变的,因此存在使用String数据类型存储在内存中的敏感数据的漏洞。

https://www.geeksforgeeks.org/use-char-array-string-storing-passwords-java/

Why is char[] preferred over String for passwords?

我是否可以通过使字符串变量无效而不是使用char数组或字符串缓冲区/构建器来克服此安全问题。

例如:String password =“password”;      password = null;

2 个答案:

答案 0 :(得分:6)

没有。对字符串进行无效操作只会延迟引用。但该值仍将存在于字符串池中。因为为了节省内存,字符串值保留在字符串池中。

任何潜在的黑客都可以通过访问字符串池来检索该值。

然而,使用char [],您可以简单地将该对象视为任何其他对象。并且取消char对象将在垃圾收集时擦除堆中的数据。

更好的选择是使用字节数组。

详细了解String Constant pool

答案 1 :(得分:2)

如果你想要绝对安全,不。取消String并不是正确的解决方案。

这样做的原因是将其归零不能保证String不再可用。虽然它可能使它更有可能被垃圾收集(这只是一个'可能'),但是不能保证何时(或者甚至)它将被垃圾收集。

您应该使用字节数组或char数组,然后在完成后使数组中的每个元素都为空。

相关问题