我将普通密码作为字符串存储在内存中时出现问题.根据该参考文献,由于字符串是不可变的,因此存在使用字符串数据类型存储在内存中的敏感数据的漏洞.
https://www.geeksforgeeks.org/use-char-array-string-storing-passwords-java/
我可以通过使字符串变量无效而不是使用char数组或字符串缓冲区/构建器来克服此安全问题.
例如:String password ="password"; password = null;
否.对字符串进行无效化只会使引用脱钩.但该值仍将存在于字符串池中.因为为了节省内存,字符串值保留在字符串池中.
任何潜在的黑客都可以通过访问字符串池来检索值.
然而,使用char [],您可以简单地将该对象视为任何其他对象.并且取消char对象将在垃圾收集时擦除堆中的数据.
更好的选择是使用字节数组.
阅读有关String Constant池的更多信息.