✏️ Java 코드 에디터
취약한 코드
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
검증되지 않은 리다이렉트는 사용자를 신뢰할 수 없는 사이트로 유도하여 자격 증명을 탈취하는 데 악용될 수 있습니다.