Fortify Audit Workbench 筆記 Privacy Violation: Heap Inspection 隱私泄露(堆檢查)


Privacy Violation: Heap Inspection 隱私泄露(堆檢查)

Abstract

將敏感數據存儲在 String 對象中使系統無法從內存中可靠地清除數據。

Explanation

如果在使用敏感數據(例如密碼、社會保障號碼、信用卡號等)后不清除內存,則存儲在內存中的這些數據可能會泄漏。 通常而言, String 是所用的存儲敏感數據,然而,由於 String 對象不可改變,因此用戶只能使用 JVM 垃圾收集器來從內存中清除 String 的值。 除非 JVM 內存不足,否則系統不要求運行垃圾收集器, 因此垃圾收集器何時運行並無保證。 如果發生應用程序崩潰,則應用程序的內存轉儲操作可能會導致敏感數據泄漏。
例 1: 下列代碼可將密碼從字符數組轉換為 String。

private JPasswordField pf;
...
final char[] password = pf.getPassword();
...
String passwordAsString = new String(password);

此種類來源於 Cigital Java Rulepack。 http://www.cigital.com/securitypack/

Recommendation

請始終確保不再需要使用敏感數據時將其清除。 可使用能夠通過程序清除的字節數組或字符數組來存儲敏感數據,而不是將其存儲在類似 String 的不可改變的對象中。 例 2: 下列代碼可在使用密碼后清除內存。

private JPasswordField pf;
...
final char[] password = pf.getPassword();
// use the password
...
// erase when finished
Arrays.fill(password, ' ');


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM