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) 테스트 검증 완료.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

enhancementNew feature or request

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions