将null分配给字符串var以删除敏感数据

时间:2015-05-19 17:52:34

标签: java fortify

在这里查看一些Fortify调查结果,它告诉我不要将字符串数据类型用于敏感数据,因为它们可能会在内存中停留太长时间。如果存在无关的内存攻击,则会暴露用户的数据,例如Heartbleed。

如果我在使用后将字符串var设置为null,那么该内存位置是否实际被清除,或者是为存储null而创建的var的副本?

由于

2 个答案:

答案 0 :(得分:8)

我认为你问的是错误的问题。

如果将变量设置为null,则确定该引用指向null。原始值可以被垃圾收集。

问题是字符串比这复杂一点。你应该问的问题是为什么弦乐会在记忆中留下来?

答案就是字符串文字池。谷歌是你的朋友,但这是一个不错的开始:

What is the Java string pool and how is “s” different from new String(“s”)?

When will a string be garbage collected in java

Garbage collection of String literals

答案 1 :(得分:0)

如果您将String引用设置为null,那么它可能无法从实际内存中删除,并且可能适用于潜在的黑客。

您可以使用Char[]并将其设置为空/无效字符以避免此问题,并且最好将sensitive数据保持为encrypted格式。