因为 Java 字符串对象是不可变的并且垃圾收集器是异步的,所以将身份验证信息存储在字符串中会阻止一种有利于线程安全的安全性。
安全处理此类信息需要可变性,即将以前用于存储敏感信息的内存清零。
假设您可能正在使用带有 HeartBleed 漏洞的 openssl 版本。
一个简单的身份验证实现是否会导致 JVM 内存中充斥着用户名和密码?
如果您不能先验地知道信息不敏感,是否应该完全避免使用 java.lang.string?
作为一个附带问题,JVM 可以做些什么来降低风险?我不知道有一个开关是“尽快零填充回收内存”。