✏️ Java 코드 에디터
취약한 코드
public void deleteUser(HttpServletRequest request) {
// [취약한 코드] 외부 입력값인 "role" 파라미터를 그대로 신뢰하여 보안 결정 수행
// 공격자가 URL에 ?role=admin 을 추가하여 접근 시 권한 우회 가능
String role = request.getParameter("role");
if (role != null && role.equals("admin")) {
// 관리자 기능 수행
userService.deleteUser(request.getParameter("userId"));
}
}
💡 수정 가이드 (KISA 가이드)
1. 세션 기반 검증
클라이언트가 보낸 파라미터 대신, 로그인 시 서버 세션에 저장된 권한 정보를 사용해야 합니다.
HttpSession session = request.getSession();
String role = (String) session.getAttribute("role");
if (role != null && role.equals("admin")) {
// 기능 수행
}
📊 분석 결과 및 설명
🎯 목표
인증, 인가 등 보안 결정 로직에서 클라이언트가 조작 가능한 쿠키, 파라미터 값을 직접 사용하지 않고 서버 측 세션 정보를 신뢰해야 합니다.
⚠️ 현재 취약점
Improper Input for Security Decision
공격자가 파라미터를 변조하여 관리자 권한을 획득하거나 인증을 우회할 수 있습니다.