繁体   English   中英

使用Spark Java(webserver)从内存中删除敏感数据

[英]Removing sensitive data from memory when using Spark Java (webserver)

我正在使用SparkJava ,在处理密码时我很感到安慰。 这个想法是将密码(以纯文本形式)传递给服务器(显然是在https下),然后是哈希和盐服务器端,并将salt和hash存储在服务器上供用户使用。 但是,根据这篇文章 ,出于安全原因,绝不应将纯文本密码存储为内存中的String。

但是,当使用SparkJava从POST请求访问http协议体时,API会返回一个具有明文密码的String。

Route post = (request, response) -> {
    String dataWithPassword = request.body();
    //     ^-- Stays in memory until GC kicks in 
}

我该怎么做才能确保从客户端收到的明文密码不会存储为String服务器端,所以这可能永远不会成为潜在的安全漏洞? 或者我还能做些什么来确保内存被清除并且明文密码不会留在内存中?

你这样做的方式已经保证,这个密码永远不会存储在文件中,比如服务器日志。 但在Java中,没有官方的方法可以清除内存。 您无法保证清除保存纯文本密码的内存。 您甚至可以将引用dataWithPassword设置为null并调用System.gc(),这表示现在是运行垃圾收集器的好时机,但不能保证清除该内存。 我发现您的方法中可能存在的安全问题是将密码以纯文本形式从客户端发送到服务器,即使使用https(我强烈建议不要这样做)。 您可以做的最好的事情是要求客户端o给您已加密的密码,这样您就不必担心内存中的这个值,并且您将获得更多安全性,因为网络嗅探器和代理将会不是现在密码是什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM