[스프링 시큐리티] 세션 관리

Welcome to Seoyun Dev Log·2024년 9월 22일
0

보안

목록 보기
3/18
  1. 동시 세션 제어
  2. 세션 고정 보호
  3. 세션 정책
  4. SessionManagementFilter & ConcurrentSessionFilter

1. 동시 세션 제어

  • 하나의 계정에서 동시세션 제어의 개수를 초과하지 못하도록 제어한다.

여러 클라이언트(User라는 Id를 가진 클라이언트가 여러 인터페이스에서 요청)가 서버에 접속 요청 -> 각 클라이언트가 인증을 한다 -> 하나의 계정 즉 똑같은 계정으로 여러개의 세션이 생기는 경우를 동시 세션 이라고 한다.
동일한 계정인데 여러개의 세션이 생기는 것

  • 컴퓨터 및 모바일 등 여러 인터페이스로 인증을 받을 수 있다. 따라서 컴퓨터에서 인증을 받은 클라이언트 2번 모바일 2번 패드 3번 일 때 동시적 접속 세션 개수를 몇개로 제어할 지 여부를 결정할 수 있다. (보안에 안정적인 방법으로 강화)

세션

http 통신이라는 가정하에 서버가 클라이언트 요청을 받을 경우 클라이언트의 고유 id, pwd 등을 알 수 없고 요청에 대한 속성 및 요청에 대한 정보만 알 수 있다.
또한 응답을 받은 경우 http connection은 종료가 되기 때문에 state less 즉 상태를 유지시키지 않는다.
이런 경우 다시 요청하게되면 서버는 누군지 모르고 새롭게 요청하는 클라이언트로 인식한다.
따라서 서브는 이전의 데이터를 다시 사용할 수 없기 때문에 클라이언트의 이름 즉 sessionId를 발급하여 클라이언트마다 고유 Id를 가질 수 있게 한다.
클라이언트가 여러개 있더라도 각 고유 아이디를 가지고 있다
그 이후 클라이언트가 요청하는 경우 서버는 이미 클라이언트의 세션 아이디를 알고 인식하기 때문에 이후 정보를 그대로 사용할 수 있게 된다.

1) 사용자 세션 강제 만료

최대 세션 갯수를 초과하는 경우 인증에는 성공하나 첫번째 인증했던 사용자의 세션을 강제로 만료 시킨다.
접속이 오래된 순서로 세션을 만료시킨다.

2) 사용자 인증 시도 차단

세션 갯수를 초과하는 경우 인증 예와가 발생하여 로그인 자체를 차단하여 접속하지 못하도록 한다.

사용 방법

sessionManagement() API - 동시 세션 제어

    1. maxSessionPreventsLogin(true) : 사용자 인증 시도 차단
    1. maxSessionPreventsLogin(false) : 사용자 세션 강제 만료
    1. invalidSessionUrl() , expiredUrl() 이 차이점은 하단 표의 세션 만료 후 리다이렉션 전략으로 볼 수 있다.


2. 세션 고정 보호 전략

  • 브라우저 또는 하드에 공격자가 세션 쿠키를 심을 수 있다.
  • 스프링 시큐리티는 기본적으로 세션 고정 보호 전략의 changeSessionId()를 설정하고 있다.


3. 세션 생성 정책

  • 정책 전략 기본값을 IF_REQUIRED이다.
  • 익명 여부에 상관없이 = 익명 사용자

  • stateLess의 경우에도 인증 관점에서 봐야한다. 인증과 관련없는 인가의 경우 세션이 생성되거나 이외의 기능에는 세션이 생성된다. 전혀 생성이 되지 않는 것이 아니다. 즉 인증과 관련되서는 stateLess가 적용되는것이다.
  • csrf는 세션에 저장한다. 이것은 인증과는 별도의 목적으로 외부 공격에 방어하기 위한 목적이다.
profile
하루 일지 보단 행동 고찰 과정에 대한 개발 블로그

0개의 댓글

관련 채용 정보