2014-10-30 2 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

+0

* "ProcessBuilder() 내에서 암호를 일반 텍스트로 전달하는 것이 안전합니다."* - 아니요,하지만 선택 사항은 무엇입니까 ... 또한 Windows에서는 전달 된 매개 변수를 실제로 결정할 수 있습니다 프로세스에 ... 보안을 덜어줍니다. – MadProgrammer

+0

명령에서 암호를 읽을 수있는 사람은 누구나 처음부터 프로세스에서 문자열을 읽을 수 있습니다. – SLaks

답변

2

아니, 다른 프로세스에 일반 텍스트 암호를 전달하는 데 안전하지 감사합니다. 그리고 커맨드 라인 인수로 전달하는 것은 확실히 안전하지 않습니다. 일반 사용자는 특별한 권한 (예 : ps 또는 top의 출력 또는 Windows의 해당 출력)없이 명령 줄 인수를 읽을 수 있습니다.

마지막으로 String 변수에서 암호를 캡처하고 보관하지 마십시오. 문자 배열을 사용하고 더 이상 필요하지 않게되면 내용을 덮어 씁니다. String 문제는 메모리를 회수 할 때 제어하지 않고 내용을 덮어 쓸 수 없다는 것입니다 (String is immutable).

이 작업을 수행하는 더 좋은 방법은 무엇입니까? program.exe에 대한 프로그래밍 인터페이스 (API)를 작성하고 호출 또는 소켓을 통해 정보를 전달하는 방법은 어떻습니까? 암호를 사용자가 읽을 수있는 파일로 전달하고 해당 파일의 이름이나 핸들을 지정하는 방법은 어떻습니까?

program.exe를 변경할 수 없으면 안전하지 않은 접근 방식을 사용해야합니다.

관련 문제