在这里查看一些Fortify调查结果,它告诉我不要将字符串数据类型用于敏感数据,因为它们可能会在内存中停留太长时间。如果存在无关的内存攻击,则会暴露用户的数据,例如Heartbleed。
如果我在使用后将字符串var设置为null,那么该内存位置是否实际被清除,或者是为存储null而创建的var的副本?
由于
答案 0 :(得分:8)
我认为你问的是错误的问题。
如果将变量设置为null,则确定该引用指向null。原始值可以被垃圾收集。
问题是字符串比这复杂一点。你应该问的问题是为什么弦乐会在记忆中留下来?
答案就是字符串文字池。谷歌是你的朋友,但这是一个不错的开始:
What is the Java string pool and how is “s” different from new String(“s”)?
答案 1 :(得分:0)
如果您将String
引用设置为null,那么它可能无法从实际内存中删除,并且可能适用于潜在的黑客。
您可以使用Char[]
并将其设置为空/无效字符以避免此问题,并且最好将sensitive
数据保持为encrypted
格式。