通过Java中的内存转储缓解凭据泄漏

时间:2018-10-17 15:24:43

标签: java security memory-dump

我们都知道Java中的密码/凭据应存储为char数组。它是缓解措施,而不是保护措施。

我始终保持凭据不使用不可变的对象,但我迟早需要将其传递给某个期望使用String的类(来自我们使用的所有第3个库)。难道不是所有的努力都消失了吗? 例如:如果我要设置授权标头,则标头值由org.apache.http.message.BasicHeader类存储为String。 另一个例子(可能不是很好):我使用一种处理密码的服务(存储密码或其他东西)。它要求它们作为POST请求中的主体。我创建HttpPost并将StringEntity添加为主体。它已经存储为String,可以再次转储。

您是否设法使凭据相对安全地防止内存转储?

谢谢

1 个答案:

答案 0 :(得分:0)

与该领域的一些安全专家联系后,我得到了以下答案:

  1. 在Java中将凭据存储为char []是第二层防御。第一个是不允许他们进行内存转储。
  2. 如果通过了第一级认证,我们可以减轻它们将在内存中找到多少凭据。
  3. 如今,几乎没有可能不使用第三方库。但是,在我的所有示例中,第三方库在短时间内都引用了我的密码。他们将其存储为String的事实并不意味着我们不应该正确存储它。我们必须以不要将凭据存储为字符串为目标,尤其是在缓存或长时间保留对该对象的引用的其他地方。