我试图学习有关Java中安全编码的更多信息,并承担了使我的代码更合规的任务。如果在下面创建的示例程序中处理敏感文件数据,如何确保在内存中执行后数据不会残留?
我主要是想知道是否需要使用程序原样清除内存。
我已经阅读了多个帖子,但是到目前为止,我还没有找到直接的解释。如果您采用其他方法以一种更安全的方式从文件中读取一行,请随时告诉我。阅读了这么多资料后,我开始感到有些迷茫。对新手的任何帮助将不胜感激!
import java.io.*;
public class Data {
private static final String file = "fileData.txt";
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(file));
String data = null;
try {
// Read from the file
data = br.readLine();
// closing BufferedReader
br.close();
// Printing a line from file
System.out.println(data);
}
//define catch to handle the IOException
catch (IOException e) {
e.printStackTrace(); // Print Stack Trace for further analysis
}
}
}
恐怕您正在为一个失败的事业而战。
即使您zeroize使用了BufferedReader
的缓冲区(由于它是私有的,您也必须使用access via reflection,所以不能保证compacting memory时未将JVM制作为它的副本。
引用Thomas Pornin's answer to a related question:
如果您的安全模型和上下文要求归零密钥,那么您根本不应该使用Java(或者除了C和汇编语言以外,几乎什么都不能使用。)>>