△/SecureCoding

자원 삽입

KkingKkang 2022. 11. 11. 15:22
728x90

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

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

 

예제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("소켓 생성에 실패했습니다.");
    }
}

 

 

728x90