代码之家  ›  专栏  ›  技术社区  ›  Sivaprasanna Sethuraman

如何安全地处理敏感的环境变量?

  •  1
  • Sivaprasanna Sethuraman  · 技术社区  · 6 年前

    我开发了一个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

    我对 ProcessBuilder#environment() 它只为该子进程提供环境。对该环境所做的更改仅影响该子进程。我已经通过 ProcessBuilder#environment()

    现在我的问题是,在这次行动的最后,也就是什么时候 awk.destroy() 调用时,环境是否会与我放置的所有敏感变量一起被擦除,或者手动擦除环境变量映射是否更好 env.remove(SENSITIVE_VARIABLE_KEY) env.putAll(new HashMap<String, String>)

    1 回复  |  直到 6 年前
        1
  •  2
  •   Kent    6 年前

    process.destroy 不会清除服务器上的系统环境 ProcessBuilder

    我不明白您的要求,为什么要删除env条目。如果在你的 awk 过程,你不用 pb 对象,并且没有对它的引用,java将对它进行垃圾收集。我不明白从地图上删除敏感条目会给你带来什么。你还有一个java变量 environmentVariable 保存你的敏感数据。

    map.remove() 如果你想清理地图,你可以这样做 pb.environment().clear() . 但如果你已经这样做了,当你开始一个新的过程 ,它将使用修改后的环境映射。