동시 세션 제어

동시 세션 제어

 

 

  • 현재 동일한 계정으로 인증 받을 때 생성되는 허용된 세션의 갯수가 초과가 되었을 때, 지속적으로 세션을 유지하는 제어 방법 
  • 세션을 제한 하는 방법으로는 총 두가지가 존재함.
    • 새로운 사용자가 나타 날 경우, 이전 사용자 세션을 만료 시킴 
    • 이전 사용자 세션을 존재 할 경우, 현재 사용자 인증을 실패시킴.(로그인을 하지 못하게 함.)

SecurityConfig

 

  • .sessionManagement() : 세션 관리 메소드를 선언
  • .maximumSessions(1) : 중복 세션 최대 갯수를 설정
  • .maxSessionsPreventsLogin(true) : 기본값은 false이며 flase, true에 따라 세션제어 방법을 선택할 수 있음.
    • false시 :  새로운 세션이 생기면 이전 세션은 만료시킴
    • true시 : 이전 세션이 있을 경우, 로그인 불가능하게 함. 
http
        .sessionManagement()
        .maximumSessions(1)
        .maxSessionsPreventsLogin(true)
        ;

세션 고정 공격

 

  • 공격자가 이미 인증을 받은 세션을 가지고 계속 서버에 접근 하는 것을 말함.

 

 

  1. 공격자가 WebApp에 접근 하여 session값을 받음. 
  2. 공격자가 사용자에게 해당 세션을 넘겨줌
  3. 사용자가 사용자의 세션을 가지고 WebApp에 로그인을 함.
  4. 로그인 성공시 인증이 완료된 세션이 생김
  5. 해당 세션으로 공격자가 계속 접근함. 

SecurityConfig

 

  • .sessionManagement() : session관리 기능 메소드 선언.
  • .sessionFixation() : 같은 사용자의 접근에 따른 세션설정을 지정하는 메소드
    • .none() : 같은 사용자가 서버에 접근하더라도 새 세션을 발급하지 않는 것. (보안에 매우 취약함)
    • .changeSessionId() :  Servlet 3.1 이상 버젼에 이용 되는 메소드로, 새로운 세션 발급 및 기존에 있는 사용자 정보는 유지 하는 메소드
    • .migrateSession() : Servlet 3.1 이하 버젼에 이용 되는 메소드로, 새로운 세션 발급 및 기존에 있는 사용자 정보는 유지 하는 메소드
    • .newSession() : 새로운 세션 발급 및 기존에 있는 사용자 정보없애고 새로 만드는 메소드
http
        .sessionManagement()
        .sessionFixation().changeSessionId();

세션 정책(Session Policy)

 

세션생성 방식에 대한 정책을 지정하는 메소드

'Backend > Security' 카테고리의 다른 글

권한 설정 및 표현식  (0) 2023.01.09
SessionManagementFilter, ConcurrentSessionFilter  (0) 2023.01.03
AnonymousAuthenticationFilter  (0) 2023.01.03
Remember Me 인증  (0) 2023.01.03
Logout 처리 및 LogoutFilter  (0) 2023.01.03