通过ProcessBuilder传递合理的数据

时间:2014-10-30 20:33:03

标签: java

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

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

谢谢

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

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

1 个答案:

答案 0 :(得分:2)

不,将明文密码传递给其他进程是不安全的。并且绝对不能将它作为命令行参数传递 - 普通用户可以在没有任何特殊权限的情况下读取命令行参数(例如ps或top的输出或Windows中的等效参数)。

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

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

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