🌐 신뢰되지 않는 URL 주소로 자동접속 연결 - 실습 시뮬레이터

CWE-601: URL Redirection to Untrusted Site ('Open Redirect')

✅ 학습 진행도
  • 진단 시작
  • 취약점 식별
  • 허용 목록(Whitelist) 적용
✏️ Java 코드 에디터 취약한 코드
RedirectController.java 💡 허용된 URL 목록과 비교하여 안전한 경우에만 이동하세요.
public void doRedirect(HttpServletRequest request, HttpServletResponse response) throws IOException {
    String url = request.getParameter("url");
    
    // [취약한 코드] 외부 입력값을 검증 없이 리다이렉트 경로로 사용
    // 공격자가 'http://evil.com'을 입력하면 피싱 사이트로 이동됨
    response.sendRedirect(url);
}
💡 수정 가이드 (KISA 가이드 기준)
1. 허용 목록(Whitelist) 검증

이동 가능한 URL 목록을 미리 정의하고, 입력값이 목록에 포함되는지 확인합니다.

String[] allowedUrls = {"/home", "/login", "/board"}; boolean isAllowed = false; for(String allowed : allowedUrls) { if(allowed.equals(url)) { isAllowed = true; break; } } if(isAllowed) { response.sendRedirect(url); } else { response.sendRedirect("/main"); // 기본 페이지로 이동 }
📊 분석 결과 및 설명
🎯 목표

사용자가 입력한 URL로 리다이렉트할 때, 피싱 사이트나 악성 사이트로 이동하지 않도록 허용된 주소인지 검증해야 합니다.

⚠️ 현재 취약점

Open Redirect

검증되지 않은 리다이렉트는 사용자를 신뢰할 수 없는 사이트로 유도하여 자격 증명을 탈취하는 데 악용될 수 있습니다.

✅ 학습 진행도
  • 진단 시작
  • 취약점 식별
  • Whitelist 검증 적용
🐍 Python 코드 에디터 취약한 코드
views.py (Django) 💡 허용된 도메인 리스트를 확인하세요
from django.shortcuts import redirect

def user_redirect(request):
    url = request.GET.get('url')
    # [취약한 코드] 입력받은 URL로 무조건 이동
    # 공격자가 ?url=http://malware.com 입력 시 이동됨
    return redirect(url)
💡 수정 가이드 (Python 가이드 기준)
1. 화이트리스트 검증

이동할 수 있는 URL을 리스트로 관리합니다.

ALLOWED_URLS = ['/home', '/dashboard', '/login'] if url in ALLOWED_URLS: return redirect(url) else: return redirect('/home') # 기본 경로로 이동
📊 분석 결과 및 설명
🎯 목표

외부 입력값에 의존하여 페이지를 이동할 경우, 허용된 경로인지 서버 측에서 반드시 확인해야 합니다.

⚠️ 현재 취약점

Unvalidated Redirect

검증 로직 부재로 인해 임의의 사이트로 리다이렉트가 가능합니다.