Java 将null分配给字符串变量以删除敏感数据

Java 将null分配给字符串变量以删除敏感数据,java,fortify,Java,Fortify,通过这里的一些强化发现,它告诉我不要对敏感数据使用字符串数据类型,因为它们可能在内存中停留太久。这会在出现不相关的内存攻击(如Heartbleed)时暴露用户的数据 如果我在使用后将字符串变量设置为null,那么该内存位置实际上会被清除,还是会创建一个变量副本来存储null 谢谢我想你问错问题了 如果您将一个变量设置为null,那么请确保引用指向null。原始值可以被垃圾回收 问题是字符串比这复杂一点。你应该问的问题是为什么字符串还能留在内存中? 一个答案是字符串文本池。谷歌是你的朋友,但这是一

通过这里的一些强化发现,它告诉我不要对敏感数据使用字符串数据类型,因为它们可能在内存中停留太久。这会在出现不相关的内存攻击(如Heartbleed)时暴露用户的数据

如果我在使用后将字符串变量设置为null,那么该内存位置实际上会被清除,还是会创建一个变量副本来存储null


谢谢

我想你问错问题了

如果您将一个变量设置为null,那么请确保引用指向null。原始值可以被垃圾回收

问题是字符串比这复杂一点。你应该问的问题是为什么字符串还能留在内存中?

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


我想你问错问题了

如果您将一个变量设置为null,那么请确保引用指向null。原始值可以被垃圾回收

问题是字符串比这复杂一点。你应该问的问题是为什么字符串还能留在内存中?

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


如果将
String
references设置为null,则它可能不会从实际内存中删除,并且可能对潜在的黑客可用


您可以使用
Char[]
并将其设置为null/invalid chars以避免此问题,而且最好将
敏感的
数据保持为
加密的
格式。

如果将
String
引用设置为null,则可能不会从实际内存中删除它,并且可能对潜在的黑客有用


您可以使用
Char[]
并将其设置为null/invalid chars以避免此问题,而且始终最好将
敏感的
数据保持为
加密的格式。

同意,加密是最好的,但在某些情况下它必须是明文才能使用。同意,加密是最好的,但在某种程度上,它必须是明文才能使用。所以在阅读了所有这些之后,听起来最好的方法是Fortify和@K139-使用Char[]的建议,并在完成后将其置为空。@DaveC如果您担心有人会遇到读取程序内存的麻烦,是什么阻止他们仅仅读取字符数组?我不会说强化是100%准确的,但逻辑是这样的。如果我加载了一个含有敏感数据的Char[],我可以在使用后立即擦除它,并且数据不再存在内存中。像Heartbleed这样的攻击依赖于数据在内存中停留的时间足以被攻击代码读取。使用Char[]并不能完全缓解vuln,但如果内存中的时间从X分钟数减少到X毫秒数,则可能性会显著降低。而且我在每次发布时都会看到更少的嘈杂强化结果:-另一方面,您的同事将继承并维护奇怪的代码。一切都是有代价的。所以在阅读了所有这些之后,听起来最好的方法是Fortify和@K139的建议-使用Char[]并在完成后将其置为空。@DaveC如果您担心有人会在读取程序内存时遇到麻烦,是什么阻止他们仅仅读取字符数组?我不会说强化是100%准确的,但逻辑是这样的。如果我加载了一个含有敏感数据的Char[],我可以在使用后立即擦除它,并且数据不再存在内存中。像Heartbleed这样的攻击依赖于数据在内存中停留的时间足以被攻击代码读取。使用Char[]并不能完全缓解vuln,但如果内存中的时间从X分钟数减少到X毫秒数,则可能性会显著降低。而且我在每次发布时都会看到更少的嘈杂强化结果:-另一方面,您的同事将继承并维护奇怪的代码。一切都有代价。