Secure Coding Guide | 반복된 인증시도 제한 기능 부재
정의
인증 시도 횟수를 제한하지 않아 공격자가 무작위 인증 시도를 통해 계정 접근 권한을 얻을 수 있는 보안약점이다.
영향
공격자로 부터 무작위 ID와 패스워드로 무차별 대입 인증공격을 시도하여 계정 접근 권한 획득한다.
조치 방법
로그인 루틴 호출 시 실패 횟수를 제한하지 않은 경우
안전하지 않은 Java 코드 일부
User user = userMapper.selectById(userId)
// 비밀번호가 일치하지 않은 경우
if (!passwordEncoder.matches(password, user.getPassword()))
throw new BadCredentialsException("2006");
패스워드에 대한 실패 횟수에 대한 검증이 없다.
안전한 Java 코드 일부
User user = userMapper.selectById(userId)
// 로그인 실패 수가 5번 이상이면 로그인 거부
if (user.getLoginFailedCount() >= 5) {
throw new BadCredentialsException();
}
// 비밀번호가 일치하지 않은 경우
if (!passwordEncoder.matches(password, user.getPassword())) {
user.setLoginFailedCount(user.getLoginFailedCount() + 1);
userMapper.updateLoginFailedCount(user);
throw new BadCredentialsException();
}
패스워드에 대한 실패 횟수에 대한 검증이 있다.
최종 수정 : 2018-05-27