삶 가운데 남긴 기록 AACII.TISTORY.COM
JAVA 보안 Resource Injection 본문
Resource Injection
파일이나 소켓 포트 등 외부 입력값을 식별자로 사용하는 경우, 시스템 자원에 임의로 접근하거나 수정할 수 있고 잘못된 입력값으로 인해 시스템이 불안정해질 수 있습니다.
입력 값을 검증하거나 사전에 정의된 리스트에서 선택되도록 작성해 방어합니다. 외부 입력이 파일명인 경우 경로 순회를 수행할 수 있는 문자를 제거해야 합니다.
아래 예제는 외부의 입력을 소켓 번호로 그대로 사용하고 있어 안전하지 않은 예입니다.
public void service(){
//외부에서 입력 받은 데이터
String service = props.getProperty("Service No");
int port = Integer.parseInt(service);
//외부 입력 값으로 소켓생성
serverSocket = new ServerSocket(port+3000);
...
}
아래 예제는 안전하게 수정한 예입니다.
public void service(){
//외부 입력 데이터
service = props.getProperty("Service No");
//외부 입력 값을 기본 검사를 함
if("".equals(service)) servie = "8080";
int port = Integer.parseInt(service);
//리스트에서 적합한 값을 할당
switch(port){
case 1:
port = 3001; break;
case 2:
port = 3002; break;
default:
port = 3000;
}
serverSocket = new ServerSocket(port);
...
}
마찬가지로 IP나 PORT번호를 args [0]에 전달된 값을 그대로 실행하는 경우도 의도와 다른 동작을 할 수 있으므로 값을 검증하는 코드를 추가해야 합니다.
참고
http://cwe.mitre.org/data/definitions/99.html
728x90
'DEV&OPS > Java' 카테고리의 다른 글
JAVA 보안 OS Command Injection (0) | 2022.08.03 |
---|---|
JAVA 보안 Cross-site Scripting (0) | 2022.08.03 |
JAVA 보안 SQL Injection (0) | 2022.08.03 |
CRUD (0) | 2022.07.26 |
MVC 패턴 (0) | 2022.07.21 |