簡體   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