동시 세션 제어
- 현재 동일한 계정으로 인증 받을 때 생성되는 허용된 세션의 갯수가 초과가 되었을 때, 지속적으로 세션을 유지하는 제어 방법
- 세션을 제한 하는 방법으로는 총 두가지가 존재함.
- 새로운 사용자가 나타 날 경우, 이전 사용자 세션을 만료 시킴
- 이전 사용자 세션을 존재 할 경우, 현재 사용자 인증을 실패시킴.(로그인을 하지 못하게 함.)
SecurityConfig
- .sessionManagement() : 세션 관리 메소드를 선언
- .maximumSessions(1) : 중복 세션 최대 갯수를 설정
- .maxSessionsPreventsLogin(true) : 기본값은 false이며 flase, true에 따라 세션제어 방법을 선택할 수 있음.
- false시 : 새로운 세션이 생기면 이전 세션은 만료시킴
- true시 : 이전 세션이 있을 경우, 로그인 불가능하게 함.
http
.sessionManagement()
.maximumSessions(1)
.maxSessionsPreventsLogin(true)
;
세션 고정 공격
- 공격자가 이미 인증을 받은 세션을 가지고 계속 서버에 접근 하는 것을 말함.
- 공격자가 WebApp에 접근 하여 session값을 받음.
- 공격자가 사용자에게 해당 세션을 넘겨줌
- 사용자가 사용자의 세션을 가지고 WebApp에 로그인을 함.
- 로그인 성공시 인증이 완료된 세션이 생김
- 해당 세션으로 공격자가 계속 접근함.
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 |