2014-10-30 47 views
0

我正嘗試從我的Java程序與外部控制檯應用程序進行通信,並且我需要將密碼傳遞給它。通過ProcessBuilder傳遞合理的數據

我的問題是,在ProcessBuilder()參數列表中傳遞純文本密碼是安全的嗎?我的意思是,有人可以攔截該消息?什麼會是一個更安全的方式來實現呢?

謝謝

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

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

我想如果你的密碼是硬編碼的,就像你的例子,有人可以將它從你的程序的字節碼中提取出來。 – azurefrog 2014-10-30 20:34:20

+0

*「是,在ProcessBuilder中以純文本傳遞密碼是安全的()」* - 否,但是您有什麼選擇......另外,在Windows上,可以真正確定傳遞的參數到一個進程...使其更加安全...... – MadProgrammer 2014-10-30 20:34:43

+0

任何能夠從命令中讀取密碼的人都可以首先從您的進程中讀取字符串。 – SLaks 2014-10-30 20:39:06

回答

2

不,它不是固定在明文密碼傳遞給另一個進程。並且絕對不安全以將其作爲命令行參數傳遞 - 普通用戶可以在沒有任何特殊權限的情況下讀取命令行參數(例如,ps或top或Windows中的等效項的輸出)。

最後,避免在字符串變量中捕獲和保存密碼。使用一組字符,並在您不再需要時立即覆蓋內容。 String的問題在於,您無法控制何時回收內存,並且無法覆蓋內容(字符串是不可變的)。

什麼是更好的方法來做到這一點?如何爲program.exe創建編程接口(API),並通過調用或套接字傳遞信息。如何將密碼傳遞給用戶唯一可讀的文件並給出該文件的名稱或句柄。

如果您不能更改program.exe,那麼您將被迫使用不安全的方法。