samesite

기본적으로는 none이다. 그러나 크롬에서 최근 기본 값을 lax로 인식하기 위한 준비를 하고 있다.

samesite 옵션이 필요한 이유를 보려면 우선 XSRF 공격을 알아야 한다.

XSRF

bank.com 에 로그인 되어있다고 가정 했을 때 해당 사이트에서 사용 되는 인증 쿠키가 브라우저에 저장되어 있을 것이다. 이때에 서버는 전송 받은 쿠키를 식별하여 사용자를 식별할 것이다.

이제 로그인된 상태에서 창을 하나 더 띄어 evil.com 에 접속 해보자. 이 사이트는 해커에게 송금을 하는 폼 <form action="[<https://bank.com/pay>](<https://bank.com/pay>)"> 요청을 숨겨 두었다.

폼이 은행 사이트로 전송될 때 인증 쿠키도 당연히 은행 사이트에서 만든 것이기 때문에 같이 전송이 될 것이다. 그러면 은행은 전송받은 쿠키를 읽어 계정 주인이 접속한 것이라 생각하고 송금을 하게 될 것이다.

이러한 공격을 크로스 사이트 요청 위조라고 부른다.

실제 은행은 물론 이 공격을 막을 수 있도록 설계되어 있는데 XSRF 토큰을 이용해서 이 공격을 막을 수 있다. 폼 요청 마다 별도의 토큰을 확인해 내가 발급한 요청이 맞는지 확인한다.

하지만 이러한 절차는 구현에 시간이 걸린다는 단점을 수반한다. 모든 폼에 보호 토큰을 세팅 해줘야 한다는 것이다. 또한 요청 전부를 검수 해야 한다.

samesite=strict

이 옵션을 이용하면 이론상 XSRF 보호 토큰 없이도 크로스 사이트 요청 위조를 막을 수 있다. samesite 만 설정해도 자동으로 strict로 설정된다.

요청이 사이트 외부에서 일어날 때 (폼 전송, 링크 이동, 브라우저에 URL 입력 등) strict 옵션이 설정된 쿠키는 절대로 서버로 전송되지 않는다. 이 보호 장치는 꽤나 믿을 만하다. 그러나 불편함도 감수해야 한다.