본문 바로가기

보안/시큐어코딩

[시큐어코딩-4] 입력데이터 검증및 표현(4) 운영체제 명령어 삽입


발생원인


입력값이 시스템의 명령어로 이용되는 환경에서 입력값 검증을 하지 않은 경우에 발생


영향


시스템 명령어 수행으로 인한 시스템 점령및 파괴


코드예


 


 안전하기 않은 코드의 예 - JAVA

 ……

 props.load(in);

 String version = props.getProperty("dir_type");

 String cmd new String("cmd.exe /K \"rmanDB.bat \"");

 Runtime.getRuntime().exec(cmd " c:\\prog_cmd\\" + version);

……

 dir_type값에 대한 검증을 수행하지 않음


 안전한 코드의 예 - JAVA

 ……

   props.load(in);

   String version[] = {"1.0", "1.1"};

   int versionSelection Integer.parseInt( props.getProperty("version"));

   String cmdnew String("cmd.exe /K \"rmanDB.bat \"");

   String vs = "";

   if (versionSelection == 0)

               vs = version[0];

   else if (versionSelection == 1)

                   vs = version[1];

           else

                   vs = version[1];

 Runtime.getRuntime().exec(cmd " c:\\prog_cmd\\" + vs);

……

 입력값을 선택할 수 있게 수정