Я работал над приложением Java, которое принимает сценарий оболочки в качестве входного аргумента и выполняет его.Я использую следующий блок для подготовки среды:
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
- это карта, которая содержит некоторые конфиденциальные данные, которые впоследствии будут использоваться сценарием.
Мое понимание ProcessBuilder#environment()
заключается в том, что он обеспечивает среду только для этого подпроцесса.Изменения, которые вы делаете в этой среде, влияют только на этот подпроцесс.Я проверил это, пройдя через Javadoc ProcessBuilder#environment()
Теперь мой вопрос заключается в том, что в конце этой операции, т.е. когда будет вызван awk.destroy()
, будет ли окружающая среда уничтоженасо всеми чувствительными переменными, которые я поставил, или лучше вручную стереть карту переменных среды с помощью env.remove(SENSITIVE_VARIABLE_KEY)
или env.putAll(new HashMap<String, String>)