SameSite 와 CSRF

woolim park·2021년 3월 22일
0

SameSite

서버에서 Set-Cookie 를 이용해 쿠키를 발행할 때 쿠키에 부여할 수 있는 속성 중 하나.

Set-Cookie: mycookie=a3b2d2d4d; SameSite=Lax

SameSite 에는 다음과 같은 3가지 옵션이 가능하다.

  1. None
  2. Lax
  3. Strict

CSRF (Cross-Site Request Forgery)

CSRF 공격 시나리오

1. 사용자가 해커의 사이트를 방문한다.
2. 방문과 동시에 사용자의 블로그 사이트에 비밀번호 변경요청을 보낸다.
3. 쿠키가 같이 붙어서 요청이 되므로 사용자의 패스워드가 변경되었다.

어째서 이러한 공격이 가능했을까를 생각해보면 다음과 같다.

  1. Cross-Origin 간에는 read는 불가능해도 write는 가능하다.
  2. 쿠키는 항상 요청에 붙어서 전송된다.

SameSite의 판별

public suffix 를 기준으로 한 단계 하위 도메인까지만 확인해서 같으면 same site 라고 정의한다. 이 방식을 first-party context 라고 한다. 여기서 public suffix 란, .com, .net 과 같은 것들을 말한다.

https://www.google.com:443/path/page.html
                  |P.S|

SameSite 옵션

  • None : Cookie 가 모든 상황에서 전송, 이 경우 secure 플래그를 사용해야하는 것이 기본설정.
  • Lax : first-party context 또는 <a href=""> / document.location 로 최상단 window 에서 다른 사이트로 이동할 때 쿠키값을 붙여서 해당 사이트로 이동된다
  • Strict : first-party context 일 때만 쿠키를 전송

주의사항

Lax 가 기본값으로 설정되어 있지만 예외적으로 form 태그를 이용한 POST요청은 cross-site 일 경우에 쿠키전송이 된다.

참고자료

SameStie cookies explained / SameSite Cookie Attribute / CSRF

profile
Javascript Developer

0개의 댓글