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
'△ > SecureCoding' 카테고리의 다른 글
크로스사이트 요청 위조 (0) | 2022.11.16 |
---|---|
신뢰 되지 않는 URL 주소로 자동 접속 연결 (0) | 2022.11.15 |
위험한 형식 파일 업로드 (0) | 2022.11.15 |
크로스 사이트 스크립트 (0) | 2022.11.11 |
SQL 삽입 (0) | 2022.11.11 |
댓글