java - 通过 ProcessBuilder 传递敏感数据

标签 java

我正在尝试从我的 java 程序与外部控制台应用程序进行通信,并且我需要向其传递密码。

我的问题是,在 ProcessBuilder() 参数列表中以纯文本形式传递密码是否安全?我的意思是,有人可以拦截该消息吗?实现这一目标的更安全方法是什么?

谢谢

ArrayList<String> lstArgs = new ArrayList<String>();        
lstArgs.add("program.exe");
lstArgs.add("password");       

ProcessBuilder pb = new ProcessBuilder(lstArgs);
pb.start();

最佳答案

不,将明文密码传递给另一个进程并不安全。并且将其作为命令行参数传递绝对不安全 - 普通用户无需任何特殊权限即可读取命令行参数(例如 ps 或 top 的输出或 Windows 中的等效项)。

最后,避免在字符串变量中捕获和保存密码。使用字符数组,并在不再需要时立即覆盖内容。 String 的问题在于,您无法控制何时回收内存,并且无法覆盖内容(String 是不可变的)。

有什么更好的方法可以做到这一点?如何为program.exe 创建一个编程接口(interface)(API),并通过调用或套接字传递信息。如何在仅用户可读的文件中传递密码并给出该文件的名称或句柄。

如果您无法更改program.exe,那么您将被迫使用不安全的方法。

关于java - 通过 ProcessBuilder 传递敏感数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26662719/

相关文章:

java - 每次单击按钮时播放音频

Java - 从与本地不同的时区转换为 UTC

java - 获取第一个相同标签之后的所有标签的内容 - Jsoup

java - 如何将 Java (Hash)Map 上传到 Apache ISIS RestFUL 服务

java - 将数字分隔为 2 个数组 Java

c# - 为什么我们需要观察者模式?

java - 中断 Java 调用或回调或 R 中的类似内容

java - 使用Java流将ArrayList<Integer>转换为Integer[][]

java - 如何获取维基词典页面的 Html 源?

java - 为什么这个 if 语句不会短路?