설명
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분)의 비활성 제한을 설정합니다. 요청이 계속 발생하면 이 비활성 제한만으로는 전체 세션 수명을 제한하지 못합니다.