발생원인


외부 입력값이 내부 자원에 대한 식별자가 되는 환경에서 입력값을 검증하지 않을 경우 발생한다.



영향


시스템 내부 자원 접근, 수정, 자원간의 충돌 발생



코드예



 

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

……

public void f() throws IOException {

  int def = 1000;

  ServerSocket serverSocket;

  Properties props = new Properties();

  String fileName = "file_list";

  FileInputStream in = new FileInputStream(fileName);

  props.load(in);

 

  // 외부에서 입력한 데이터를 받는다.

 

  String service = props.getProperty("Service No");

  int port = Integer.parseInt(service);

 

  // 외부에서 입력받은 값으로 소켓을 생성한다.

 

  if (port != 0)

    serverSocket = new ServerSocket(port + 3000);

  else

    serverSocket = new ServerSocket(def + 3000);

   ……

}

……

 

Service No에 대한 입력값의 검증이 없다. 

 

 

 

 안전한 코드의 예 - JAVA

 ……

public void f() throws IOException

{

   ServerSocket serverSocket;

   Properties props = new Properties();

   String fileName = "file_list";

   FileInputStream in =  new leInputStream(fileName);

   FileInputStream in=new FileInputStream(fileName)

  String service = "";

 

  if (in != null && in.available() > 0) {

     props.load(in);

     // 외부로부터 데이터를 입력받는다.

     service = props.getProperty("Service No");

  }

 

  // 외부의 입력을 기본적인 내용 검사를 한다.

  if ("".equals(service)) service = "8080";

  int port = Integer.parseInt(service);

 

 // 외부 입력에서 포트번호를 검사한 후 리스트에서 적합한 값을 할당한다.


 switch (port) {

 case 1:

     port = 3001; break;

 case 2:

     port = 3002; break;

 case 3:

     port = 3003; break;

 default:

     port = 3000;

 } 

 

  // 서버소켓에 검사완료된 포트를 할당한다.

  serverSocket = new ServerSocket(port);

  ……

 }

  ……

 입력값 검사후 적절한 값을 할당함



블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

티스토리 툴바