사용자로부터 입력되는 값을 외부사이트의 주소로 사용하여 자동으로 연결하는 서버 프로그램
-> 피싱(Phishing) 공격에 노출되는 취약점
공격자는 해당 폼의 요청을 변조함으로써 사용자가 위험한 URL로 접속할 수 있 도록 공격
- 자동 연결할 외부 사이트의 URL과 도메인은 화이트 리스트로 관리
- 사용자 입력값을 자동 연결할 사이트 주소로 사용하는 경우에는 입력된 값이 화이트 리스트에 존재하는지 확인
EX) 외부로 연결할 URL과 도메인들은 화이트 리스트를 작성한 후, 그 중에서 선택하도록 함으로써 안전하지 않은 사이트로의 접근을 차단
//이동 할 수 있는 URL범위를 제한하여 피싱 사이트등으로 이동 못하도록 한다.
String allowedUrl[] = { "/main.do", "/login.jsp", "list.do" };
......
String rd = request.getParameter("redirect");
try {
rd = allowedUrl[Integer.parseInt(rd)];
} catch(NumberFormatException e) {
return "잘못된 접근입니다.";
} catch(ArrayIndexOutOfBoundsException e) {
return "잘못된 입력입니다.";
}
if (id.length() > 0) {
......
if ("0".equals(rs.getString(1)) && "01AD".equals(bn)) {
response.sendRedirect(rd);
return;
}
파이썬으로 바꾸면)
ERROR | 설명 |
NameError | 초기화되지 않은 변수 사용 시 |
ValueError | 값의 형식이 맞지 않을 때 |
ZeroDivisionError | 0으로 나누었을 때 |
IndexError | 범위를 벗어났을 때 |
TypeError | 타입이 맞지 않을 때 |
에러의 종류는 위와 같고, 아래는 내가 위의 자바코드를 파이썬으로 바꿔본 것이다. (틀릴 수도 있음)
allowedUrl = { "/main.do", "/login.jsp", "list.do" }
rd = request.getParameter("redirect")
try :
rd = allowedUrl[Integer.parseInt(rd)]
except TypeError as e:
print("잘못된 접근입니다.")
except IndexError as e:
print("잘못된 입력입니다.")
'Secure Coding' 카테고리의 다른 글
[시큐어 코딩] 위험한 형식 파일 업로드 (0) | 2021.08.09 |
---|---|
[시큐어코딩] SQL Injection (0) | 2021.08.03 |