[스프링시큐리티] sameSite

may_yun·2024년 11월 3일
0

보안

목록 보기
3/3

sameSite
: 크로스 사이트 간 쿠키 전송에 대한 제어를 핸들링하는 것
쿠키 설정할 때 지정.

  • 스프링시큐리티에서는 SameSite 속성에 대한 지원을 제공하지 않지만 spring Session에서는 해당 속성을 지원한다.

  1. Strict :
  • 사용자가 A서비스에 접속을하여 서비스는 사용자에게 쿠키를 발급한다
  • 세션쿠키라 가정했을 때 브라우저에 저장된다
  • 사용자가 A -> A로 요청할 경우 자동적으로 브라우저가 전달해주나, A -> B로 이동하고 다시 B -> A로 다시 요청할 경우 쿠키가 전송되지 않는다.
  • 가장 제한적인 방식으로 만약 사용자가 A 쇼핑몰에서 물건을 장바구니에 담고 PG사를 통해 결제를 한 경우 두 도메인이 다르기 때문에 쿠키값은 유실되고 결제 후 다시 A 쇼핑몰로 왔을 때 로그인 페이지로 다시 이동하는 현상이 발생할 수 있다.
    보안에는 완벽하지만 편의성이 떨어진다.
  1. Lax :
  • 구글 크롬 80 버전부터 기본 값 Lax
  • 사용자가 읽기전용 메소드, a태그, window.location.replace, 302리다이렉트 등을 통해 이동할 경우에는 타 사이트 이동시에도 쿠키를 전송해준다. 하지만 iframe, img 를 문서에 삽입하거나 AJAX 통신 등은 쿠키가 전송되지 않는다.
  • 대부분은 Lax로 기본설정이 되어 있다.
  1. none :
  • 보안에 좋지 않다
  • 모든 경우에 쿠키가 전송되는 것
  • HTTPS인 경우 SameSite none으로 설정된 쿠키는 Secure 설정이 안된경우 생성이 안된다
    SameSite=None; Secure

Spring Session SameSite 사용방법

dependency

implementation group: 'org.springframework.session', name: 'spring-session-core', version: '3.2.1'

코드

  • ⭐️@EnableSpringHttpSession : JSESSIONID(WAS가 발급)가 아닌 SESSION 으로 발급된다.
@Configuration 
⭐️@EnableSpringHttpSession 
  @Bean
  public CookieSerializer cookieSerializer() {//HttpSession 쿠키 설정
    DefaultCookieSerializer serializer = new DefaultCookieSerializer(); 
    serializer.setUseSecureCookie(true);//쿠키를 보안쿠키로 사용하겠다
    serializer.setUseHttpOnlyCookie(true);//http통신에만 쿠키를 사용하겠다
    serializer.setSameSite("Lax");//sameSite 설정 기본값이 Lax이다.
    return serializer;
  }
  @Bean
  public SessionRepository<MapSession> sessionRepository() {
  	return new MapSessionRepository(new ConcurrentHashMap<>());//session을 저장할 저장소 
  }
}

참고

profile
개발 일지

0개의 댓글