✏️ 코드 에디터
취약한 코드
@RequestMapping(value = "/modify.do", method = RequestMethod.POST)
public ModelAndView memberModifyProcess(
@ModelAttribute("MemberModel") MemberModel memberModel,
BindingResult result,
HttpServletRequest request,
HttpSession session) {
ModelAndView mav = new ModelAndView();
//1. 로그인한 사용자를 불러온다.
String userId = (String) session.getAttribute("userId");
String passwd = request.getParameter("oldUserPw");
//2. 회원정보를 실제 수정하는 사용자와 로그인 사용자와 동일한지 확인한다.
// TODO: 여기에 검증 로직 추가
...
//3. 동일한 경우에만 회원정보를 수정해야 안전하다
if (service.modifyMember(memberModel)) {
mav.setViewName("redirect:/board/list.do");
session.setAttribute("userName", memberModel.getUserName());
return mav;
} else {
mav.addObject("errCode", 2);
mav.setViewName("/board/member_modify");
return mav;
}
}
💡 수정 가이드
Step 1: 요청 사용자 ID 가져오기
String requestUser = memberModel.getUserId();
Step 2: 사용자 불일치 검증 (null 체크 포함)
if (userId != null && requestUser != null &&
!userId.equals(requestUser)) {
// 불일치 시 처리
}
Step 3: 불일치 시 에러 반환 (3가지 필수)
mav.addObject("errCode", 1);
mav.addObject("member", memberModel);
mav.setViewName("/board/member_modify");
return mav;
완성 예시:
//2. 회원정보를 실제 수정하는 사용자와 로그인 사용자와 동일한지 확인한다.
String requestUser = memberModel.getUserId();
if (userId != null && requestUser != null &&
!userId.equals(requestUser)) {
mav.addObject("errCode", 1);
mav.addObject("member", memberModel);
mav.setViewName("/board/member_modify");
return mav;
}
...
//3. 동일한 경우에만 회원정보를 수정해야 안전하다
if (service.modifyMember(memberModel)) { ... }
📊 실시간 피드백
🎯 목표
회원정보 수정 시 로그인한 사용자와 요청 사용자가 동일한지 검증하세요.
- String requestUser = memberModel.getUserId()
- userId와 requestUser null 체크
- !userId.equals(requestUser) 검증
- mav.addObject("errCode", 1)
- mav.addObject("member", memberModel) 추가
- 불일치 시 return mav 처리
⚠️ 취약점
현재 코드는 사용자 검증이 없습니다!
공격자가 다른 사용자의 ID를 파라미터로 전달하면 타인의 회원정보를 수정할 수 있습니다.