如何安全地处理敏感的环境变量?
How to safely handle sensitive environment variables?
我开发了一个 Java 应用程序,它将 shell 脚本作为输入参数并执行它。我正在使用以下块来准备环境:
ProcessBuilder pb = new ProcessBuilder("/bin/bash", scriptFile);
Map<String, String> env = pb.environment();
env.putAll(environmentVariable);
Process awk = pb.inheritIO().start();
awk.waitFor();
awk.destroy();
在上面的代码块中,environmentVariable
是一个 Map,其中包含一些稍后将被脚本使用的敏感数据。
我对ProcessBuilder#environment()
的理解是它只为那个子进程提供环境。您对该环境所做的更改仅影响该子流程。我已经通过 ProcessBuilder#environment()
的 Javadoc 进行了验证
现在我的问题是,在此操作结束时,即调用 awk.destroy()
时,环境是否会与我放置的所有敏感变量一起擦除,还是手动擦除更好环境变量映射 env.remove(SENSITIVE_VARIABLE_KEY)
或 env.putAll(new HashMap<String, String>)
process.destroy
不会清理 ProcessBuilder
上的系统环境。您仍然可以使用相同的 PB 对象来启动新进程,以及使用相同的环境映射。
我不明白您的要求,为什么要删除 env 条目。如果在 awk
过程之后,您不再使用 pb
对象,并且没有对它的引用,java 将对其进行垃圾回收。我看不出从地图中删除敏感条目会给您带来什么。无论如何,您还有另一个 java 变量 environmentVariable
保存您的敏感数据。
对于你的问题,如果你想删除一些数据,你可以使用map.remove()
,如果你想清理地图,你可以使用pb.environment().clear()
。但是如果你这样做了,当你用 pb
启动一个新进程时,它将使用修改后的 env-map。
我开发了一个 Java 应用程序,它将 shell 脚本作为输入参数并执行它。我正在使用以下块来准备环境:
ProcessBuilder pb = new ProcessBuilder("/bin/bash", scriptFile);
Map<String, String> env = pb.environment();
env.putAll(environmentVariable);
Process awk = pb.inheritIO().start();
awk.waitFor();
awk.destroy();
在上面的代码块中,environmentVariable
是一个 Map,其中包含一些稍后将被脚本使用的敏感数据。
我对ProcessBuilder#environment()
的理解是它只为那个子进程提供环境。您对该环境所做的更改仅影响该子流程。我已经通过 ProcessBuilder#environment()
现在我的问题是,在此操作结束时,即调用 awk.destroy()
时,环境是否会与我放置的所有敏感变量一起擦除,还是手动擦除更好环境变量映射 env.remove(SENSITIVE_VARIABLE_KEY)
或 env.putAll(new HashMap<String, String>)
process.destroy
不会清理 ProcessBuilder
上的系统环境。您仍然可以使用相同的 PB 对象来启动新进程,以及使用相同的环境映射。
我不明白您的要求,为什么要删除 env 条目。如果在 awk
过程之后,您不再使用 pb
对象,并且没有对它的引用,java 将对其进行垃圾回收。我看不出从地图中删除敏感条目会给您带来什么。无论如何,您还有另一个 java 变量 environmentVariable
保存您的敏感数据。
对于你的问题,如果你想删除一些数据,你可以使用map.remove()
,如果你想清理地图,你可以使用pb.environment().clear()
。但是如果你这样做了,当你用 pb
启动一个新进程时,它将使用修改后的 env-map。