Skip to content

[Feature]: 세션 고정 공격(Session Fixation Attack) 물리적 방어 및 changeSessionId() 연동 #6

Description

@devikae

Package Scope

  • Add to an existing package
  • New package
    Package name: backend

Overview
비회원에서 회원 로그인 상태로 전환될 때 기존 비회원 세션 ID가 유지되어 발생하는 세션 고정 공격(Session Fixation Attack)을 방어하기 위해 request.changeSessionId() 메커니즘을 적용

Describe the solution you'd like
고민했던 방식:

  • 방어 없음 (none): 로그인 후에도 이전 비회원 세션 ID를 그대로 유지.
  • 새 세션 완전 생성 (newSession): 기존 세션을 invalidate()로 파기하고 새 세션 생성.
    선택한 방식:
  • 세션 ID 재발급 (changeSessionId): 세션 데이터는 보존하고 세션 ID 키만 새로 재발급.
    이 방식을 선택한 이유:
  • 세션 고정 방어를 적용하지 않으면, 공격자가 미리 유저 브라우저에 심어둔 세션 ID가 로그인 시 권한 세션으로 승격되어 세션 탈취 발생
  • newSession 방식은 로그인 전 세션에 보관되어 있던 임시 입력 데이터가 삭제되는 문제가 있음.
    트레이드오프 및 극복 방안:
  • Trade-off: 세션 ID 변경으로 인해 클라이언트(Next.js 등)의 세션 쿠키 갱신 처리가 필요함.
  • 해결 방안: 기존 세션 내 데이터는 유지하면서 세션 식별자 키(JSESSIONID)만 새로 재발급함. CORS allowCredentials(true) 설정 및 Set-Cookie 응답 연동으로 클라이언트 쿠키를 안전하게 갱신함.

Additional context
로그인 시 세션 ID 재발급 검증 및 로그아웃 후 세션 무효화 접근 차단(401) 테스트 검증 완료.

Metadata

Metadata

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions