Spring Boot Session Security

By | 2021년 7월 26일
Table of Contents

Spring Boot Session Security

참조

Spring Boot Session

스프링 부트에서의 세션은 유효시간이 15분입니다.
15분동안 사용자가 아무런 행동을 하지 않으면,
유효시간이 종료되며, 로그인이 풀리게 됩니다.

또한, 쿠키 JSESSIONID 도 유지되어야 합니다.
디폴트로 JSESSIONID 의 유지시간은 브라우저 종료(브라우저 탭 X)시 사라집니다.
당연히 로그인도 풀립니다.

아래 설정으로 로그인 유지시간을 늘릴 수 있습니다.

application.yml

server:
  servlet:
    session:
      timeout: 43200m      # 60m * 24h * 30d
      cookie:
        max-age: 43200m    # 60m * 24h * 30d
        name: SID
        http-only: true
        secure: true

JSESSIONID

httpOnly

JSESSIONID 가 탈취되면, 누구나 로그인된 상태로 사이트에 접근 가능해집니다.

쿠키 JSESSIONID 는 디폴트로 httpOnly 로 설정되어 있습니다.
즉, 브라우저에서 사용되는 자바스크립트에서는 접근할 수 없습니다.
개발자도 사용 못하고, 해커도 탈취못합니다.

하지만 이걸로 충분한게 아닙니다.

해커가 사용자의 PC 와 서버 사이의 인터넷 라인에 접근한다면…
간단히 사용자가 사무실에서 서버에 접근하고,
해커가 사무실 인터넷을 사용할 수 있다면…

패킷 스니핑을 이용해 JSESSIONID 를 탈취할 수 있습니다.

Secure

https 일때만 쿠키를 전송하는 플래그입니다.

패킷 스니핑을 해도 https 는 데이타를 볼 수 없습니다.

이걸 이용해, 검증용 쿠키를 Secure 플래그를 붙여서 만들어 두면,
탈취당한 쿠키인지 정상적인 쿠키인지 확인할 수 있습니다.

Session 저장공간

세션은 디폴트로 메모리에 저장됩니다.

이로 인해 몇가지 문제가 발생합니다.

첫째로, 서버 재부팅마다 사용자 로그인이 풀립니다.

둘째, 메모리의 한계로 많은 양의 세션정보를 저장하지 못하게 됩니다.

세째, 서비스 부하 분산을 위해 병렬서버 구성시, A 서버에서 로그인했다고 해도,
다음에 B서버에 접속하게 되면 로그인이 안되어 있는 상태가 됩니다.

이를 해결하기 위해, 세션을 JDBC 에 저장하거나, Redis 와 같은
캐시 시스템에 저장하는 방식이 사용됩니다.

One thought on “Spring Boot Session Security

  1. Pingback: Spring Boot 시작하기 – 상구리의 기술 블로그

답글 남기기