SameSite?

가은·2023년 9월 25일
0

프로젝트 하다가 Spring 이랑 React.js 사이에 Cookie 전달 문제가 있어서 이래 저래 찾아보다가

암튼 이런 문제를 겪음..

그런 김에 알아보장 (개념 알아볼라고 쓴 글이라 딱히 해결 코드 그런 건 없음요)

SameSite?

Cookie의 속성으로 서로 다른 도메인간의 쿠키 전송에 대한 보안을 설정하는 것이다.

SameSite의 기본 값은 왜 Lax 일까?

기본적으론 CSRF(Cross Site Request Forgery) 공격을 막기 위함이라고 한다.

CSRF? 사이트 간 요청 위조, 웹 사이트의 취약점 공격 방식 중 하나
📍 사용자의 의지와 관련 없이 공격자가 의도한 행위를 웹 사이트에 요청 하는 것을 의미

설정 값

  • None

    • 동일 사이트와 크로스 사이트 모두 쿠키 전송이 가능하다.
    • 그렇기 때문에 보안에 취약점을 가지게 된다.
    • SameSite를 None으로 설정할 경우 Secure 속성(쿠키에 암호화된 HTTPS 연결 필요)을 넣어줘야 한다.
    • URL은 HTTPS로 처리되어야 한다.
  • Strict

    • 이 값으로 설정된 쿠키는 도메인 자체에서 시작된 요청에서만 전송된다.
      → SameSite 에서만 쿠키 전송을 허용
    • 가장 제한적인 방식이지만 편의성이 떨어진다는 점도 있다.
  • Lax

    • 기본적으로는 CrossSite 쿠키 값 전송을 차단하는 Strict 모드와 동일하지만 예외 사항을 둬서 일부 요청 방식으로는 쿠키를 보낼 수 있게 한다.

우회 방법?

  • None으로 강제로 바꾸기
  • 크로스 도메인이 일어나는 부분에서는 쿠키값이 필요한 로직을 삭제하거나 중간에 리다이렉트 페이지 만들기

이게 크롬 80 버전 이후로만 그런 줄 알았는데 이후에 Firefox, Edge 등 브라우저도 기본 값이 Lax로 바뀌었다.

Lax 쿠키가 전송되는 경우

같은 웹 사이트일 때는 당연히 전송되고, 이 외에는 Top Level Navigation(웹 페이지 이동)과 안전한 HTTP 메서드 요청의 경우 전송된다고 한다.

전송 가능

  • 유저가 링크<a>를 클릭했을 때
  • window.location.replace 등으로 인해 자동으로 이동이 이루어질 때
  • 302 리다이렉트를 이용한 이동일때

전송 불가

  • <iframe>이나 <img>를 문서에 삽입해서 발생하는 HTTP 요청일 때
  • 안전하지 않은 POST나 DELETE 요청일 때
    → GET 처럼 서버의 상태를 바꾸지 않을거라고 기대되는 요청에는 쿠키가 전송된다고 한다.

신기한 인터넷 세계...

profile
일이 재밌게 진행 되겠는걸?

0개의 댓글