본문 바로가기

Language/Spring Security

세션 고정 보호 - sessionManagement().sessionFixation()

세션 고정 보호 전략

  • 세션 고정 공격악의적인 공격자가 사이트에 접근하여 세션을 생성한 다음 다른 사용자가 같은 세션으로 로그인하도록 유도하는 위험을 의미
  • 스프링 시큐리티사용자가 로그인할 때 새로운 세션을 생성하거나 세션 ID를 변경함으로써 이러한 공격에 자동으로 대응

세션 고정 공격

  • 사용자가 공격자의 쿠키를 받은 채로 로그인을 하게 되면 공격자가 사용자의 모든 권한과 정보를 다 볼 수 있게 됨

sessionManagement() API ­ 세션 고정 보호

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {

    http.sessionManagement(session -> session
	        .sessionFixation(sessionFixation -> sessionFixation.newSession())
    );
    return http.build();
}

세션 고정 보호 전략

  • changeSessionId()
    • 기존 세션을 유지하면서 세션 ID만 변경하여 인증 과정에서 세션 고정 공격을 방지하는 방식(기본값)
  • newSession()
    • 새로운 세션을 생성하고 기존 세션 데이터를 복사하지 않는 방식 → 완전히 새로운 세션을 만드는 것 → SPRING_SECURITY_ 로 시작하는 속성은 복사
  • migrateSession()
    • 새로운 세션을 생성하고 모든 기존 세션 속성을 새 세션으로 복사
  • none()
    • 기존 세션을 그대로 사용
      → 세션 고정 보호를 사용하지 않음 → 세션 고정 공격을 받게 되어 매우 위험