Spring-Security

세션 고정 보호

neal89 2025. 5. 29. 11:56

✅ 세션 고정 공격이란?

세션 고정 공격(Session Fixation)은 공격자가 사용자의 세션 ID를 미리 고정해두고, 사용자가 로그인할 때 같은 세션을 사용하도록 유도하여 권한을 탈취하는 공격입니다.

예시:

  1. 공격자가 고정된 세션 ID로 사용자를 사이트에 접속시킴.
  2. 사용자가 로그인 → 세션 ID가 유지됨 → 공격자는 세션 ID를 알고 있음 → 탈취 가능.

✅ Spring Security의 세션 고정 보호 기본값

http
  .sessionManagement()
  .sessionFixation().changeSessionId(); // 기본값

✅ 주요 전략 비교

   

전략 설명 장점 단점
changeSessionId() 로그인 시 세션 ID만 변경 (기존 세션 속성 유지) 빠르고 효율적, 사용자 경험 좋음 오래된 컨테이너에서는 미지원 가능성
newSession() 로그인 시 새 세션 생성, 기존 속성은 복사됨 더 강력한 보안 속성 복사 비용, 동기화 문제 가능성
migrateSession() 새 세션 생성 + 기존 속성도 함께 복사 중간 단계 (보안과 성능의 균형) 일부 구현에서 예외 가능성 있음
none() 아무 처리 안 함 세션 유지됨 (테스트용) 보안 취약점 노출 (절대 실서비스에 사용 금지)

✅ 예제 코드

http
  .sessionManagement()
  .sessionFixation().migrateSession(); // 전략 선택 가능