본문 바로가기
Web Security/SecureCoding

자원 삽입

by KkingKkang 2022. 11. 11.

- 외부 입력값을 검증하지 않고 시스템 자원에 대한 식별자로 사용하는 경우 문제가 될 수 있음 

- 외부의 입력을 자원 식별자로 사용하는 경우, 적절한 검증을 거치도록 하거나 사전에 정의된 적합한 리스트에서 선택되도록 작성

 

예제1 : 적절한 검증을 거치도록 한다.

안전하지 않은 코드 ▼

public void service() 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
    	serverSockeet = new ServerSocket(def + 3000);
 }

외부 입력을 소켓 번호 그대로 사용하고 있다. 

 

안전한 코드 ▼

public void service() throws IOException {
	ServerSocket serverSocket;
    Properties props = new Properties();
    String fileName = "file_list";
    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);
}

 

예제 2 : 허용 가능한 리스트에 한하여 자원을 쓸 수 있도록 한다.

안전하지 않은 코드 ▼

public static void main(String args[]) {
	SocketClient c;
    String ip = args[0];
    int port = 7777;
    
    try {
    	c = new SocketClient(ip,port);
        c.startSocket();
    } catch(IOException e) {
    	System.out.println("소켓 생성에 실패했습니다.");
    }
}

ip를 외부의 입력(args[0])를 받아서 그대로 사용하고 있다. 

 

안전한 코드 ▼

public static void main(String args[]) {
	SocketClient  c;
    String ip = args[0];
    int port = 7777;
    
    try {
    	if("127.0.0.1".equals(ip) {
        	c = new SocketClient(ip, port);
            c.startSocket();
        }
    } catch (IOException e) {
    	System.out.println("소켓 생성에 실패했습니다.");
    }
}

 

 

반응형

'Web Security > SecureCoding' 카테고리의 다른 글

크로스사이트 요청 위조  (0) 2022.11.16
신뢰 되지 않는 URL 주소로 자동 접속 연결  (0) 2022.11.15
위험한 형식 파일 업로드  (0) 2022.11.15
크로스 사이트 스크립트  (0) 2022.11.11
SQL 삽입  (0) 2022.11.11

댓글