程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java 代碼安全(一)      —— 避免用String儲存敏感數據

Java 代碼安全(一)      —— 避免用String儲存敏感數據

編輯:關於JAVA

Java 代碼安全(一)      —— 避免用String儲存敏感數據。本站提示廣大學習愛好者:(Java 代碼安全(一)      —— 避免用String儲存敏感數據)文章只能為提供參考,不一定能成為您想要的結果。以下是Java 代碼安全(一)      —— 避免用String儲存敏感數據正文


Java 代碼安全(一)
—— 避免用String儲存敏感數據

    如果重要的數據(保存在內存中)在使用後沒有及時清理,有可能會導致信息洩漏。開發人員通常都回用String 保存敏感數據(密碼,卡號等)。因為String 對象是不可變的,只有 JVM 的垃圾回收器才能從內存中清除String的值。而只有內存不足的時候虛擬機才會執行垃圾回收,所以我們不能保證垃圾回收什麼時候進行。當系統崩潰後,memory dump 可能會洩漏敏感數據。

這裡解析一下String 對象不可變是什麼意思
比如 String  s1 = “abc”;  s1 = “def”;
這裡引用 s1 只是重新指向另外一個對象。對象”abc”並沒有被修改。

例子一:
   Final char[] password = getPassword();
   String  passwordAsString = new String(password)

這裡passwordAsString 不確定什麼時候被清理掉,容易被洩露。

解決方案:
   當重要數據不需要再使用的時候,保證把它清除掉。用byte 數組 或 character 數組來代替一些不可變的對象,比如String。應為byte 和 character 數組能用程序清理掉。
如:

Final char[] password = getPassword();
//use the password

//clear when finished
Arrays.fill(password,’’);


Memory dump : 內存轉存  
用途:存一個當時內存的副本,可以用工具打開復原當時的情況。因為東西都在內存裡。

附:java中String類的內存分配  http://jingyan.baidu.com/article/8275fc869a070346a03cf6f4.html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved