본문 바로가기
Secure Coding

[시큐어코딩] 신뢰되지 않는 URL 주소로 자동접속 연결

by 수픽 2021. 8. 9.

사용자로부터 입력되는 값을 외부사이트의 주소로 사용하여 자동으로 연결하는 서버 프로그램

-> 피싱(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