SameSite 쿠키 속성은 크로스-사이트 요청에서 쿠키가 전송되는 방식을 제어해 CSRF(Cross-Site Request Forgery) 공격을 방어하는 웹 보안 속성이다. Strict, Lax, None 세 가지 모드로 보안 수준과 사용자 경험을 조절할 수 있다.
핵심 포인트- Strict: 동일 사이트 요청에서만 쿠키를 전송한다. 온라인 뱅킹 같은 고보안 애플리케이션에 적합하고 CSRF 위험을 최소화한다.
- Lax: 크로스-사이트 서브리소스 요청(이미지, 스타일시트)에는 쿠키를 보내지 않지만, 외부 링크를 통한 최상위 탐색에는 쿠키를 전송한다. 속성을 지정하지 않으면 기본값이다.
- None: 모든 요청에 쿠키를 전송한다. 반드시 Secure 속성과 함께 사용해야 하며 HTTPS에서만 동작한다.
- Chrome 80+부터 SameSite 속성을 명시하지 않으면 기본값으로 Lax가 적용된다.
상세 정리- Strict 모드: 쿠키가 동일 사이트에서 발생한 요청에만 포함된다. 외부 링크를 클릭해도 첫 번째 요청에는 쿠키가 없어, 세션이 인식되지 않을 수 있다.
- Lax 모드: 크로스-사이트 서브리소스 요청(이미지 로드, iframe, 폼 POST)에는 쿠키를 보내지 않는다. 단, 사용자가 외부 링크를 클릭해 탐색할 때는 쿠키를 보낸다. 보안과 편의의 균형점이다.
- None 모드: 모든 크로스-사이트 요청에 쿠키가 포함된다. 제3자 서비스 연동(광고, 임베드)에 필요하지만 CSRF 취약점에 노출된다. Secure 속성이 필수다.
- CSRF 방어 원리: Strict 또는 Lax 모드는 공격자가 다른 사이트에서 인증된 요청을 위조하는 CSRF를 방어한다. 쿠키가 크로스-사이트 요청에 포함되지 않아 서버가 인증을 거부한다.
- 속성 없을 때 동작: 최신 브라우저는 SameSite=Lax를 기본 적용한다. 이전 동작에 의존하는 코드에서 예상치 못한 쿠키 차단이 발생할 수 있다.
왜 읽나- 웹 애플리케이션의 쿠키 정책을 설정하거나 CSRF 방어를 구현하는 개발자가 SameSite 속성의 각 모드가 어떤 요청에 영향을 주는지 이해하는 데 유용하다.