세션 만료 비활성화

Java 세션 만료 비활성화

설명

Servlet 세션의 setMaxInactiveInterval 값을 0 또는 음수로 설정하면 비활성 세션이 만료되지 않습니다. 로그인 세션이 장기간 유지되면 탈취된 세션 ID를 계속 재사용할 수 있고, 공용 장비나 방치된 브라우저에서 계정 접근이 지속될 수 있습니다.

잠재적 영향

  • 탈취된 세션 ID의 장기 재사용
  • 공용 장비에서 로그아웃하지 않은 계정의 지속 노출
  • 별도 재인증이 없으면 민감 기능에 기존 세션으로 계속 접근할 가능성

해결 방법

  • 인증 세션에는 업무 요구에 맞는 양수 초 단위 비활성 제한을 설정합니다.
  • 고위험 기능은 더 짧은 타임아웃과 재인증을 적용합니다.
  • 로그아웃 시 세션을 무효화하고 세션 쿠키를 만료시킵니다.

예시

이미 생성된 HttpSession에 비활성 제한을 설정하는 메서드 발췌입니다. 전체 세션 수명 제한이나 중요 작업의 재인증은 별도 정책으로 적용하세요.

변경 전

java
void login(HttpSession session) {
    session.setMaxInactiveInterval(-30);
}

변경 후

java
void login(HttpSession session) {
    session.setMaxInactiveInterval(900);
}

설명:

  • 변경 전: Servlet 세션의 setMaxInactiveInterval 값을 0 이하로 설정하면 세션이 비활성 상태에서도 만료되지 않습니다.
  • 변경 후: 900초(15분)의 비활성 제한을 설정합니다. 요청이 계속 발생하면 이 비활성 제한만으로는 전체 세션 수명을 제한하지 못합니다.

참조