OneWebDesk

SameSite 쿠키 동작 매트릭스

SameSite=Strict/Lax/None이 로그인·결제 등 교차 사이트 흐름에서 어떻게 동작하는지 정리합니다.

쿠키의 SameSite 속성은 다른 사이트에서 들어오는 요청에 쿠키를 함께 보낼지 결정하는 핵심 보안 설정입니다. Strict·Lax·None 세 값이 시나리오별로 어떻게 동작하는지 헷갈리기 쉬운데, 이 도구는 링크 클릭·폼 POST·iframe·fetch 같은 교차 사이트 상황에서 쿠키가 전송되는지를 한눈에 보여주는 매트릭스를 제공합니다.

또한 SameSite 값을 골라 실제 Set-Cookie 헤더 예시를 생성하고 복사할 수 있습니다. 헤더가 실제로 어떻게 내려가는지 확인하려면 쿠키 보안 점검로 응답 쿠키를 점검하고, 보안 헤더 점검로 전체 보안 헤더를 함께 검사하는 것을 권장합니다.

SameSite 동작 매트릭스
교차 사이트 시나리오StrictLaxNone (+Secure)
최상위 내비게이션 GET (링크 클릭)전송 안 됨전송됨전송됨
교차 사이트 폼 POST전송 안 됨전송 안 됨전송됨
교차 사이트 iframe / 임베드 리소스전송 안 됨전송 안 됨전송됨
교차 사이트 fetch / XHR전송 안 됨전송 안 됨전송됨
Set-Cookie 헤더 예시
Set-Cookie: session=...; SameSite=Lax; Secure; HttpOnly
Lax는 최신 브라우저의 기본값이며 대부분의 CSRF를 완화합니다.

SameSite 세 가지 값

각 값은 교차 사이트 요청에서 쿠키 전송 범위를 다르게 제한합니다.

  • Strict: 같은 사이트(same-site) 요청에만 쿠키 전송. 외부에서 링크를 타고 들어와도 전송되지 않습니다.
  • Lax: 최상위 내비게이션 GET(링크 클릭)에만 전송. 교차 사이트 POST·iframe·fetch에는 전송되지 않습니다.
  • None: 모든 교차 사이트 요청에 전송. 단 반드시 Secure(HTTPS)와 함께 써야 합니다.

기본값과 None을 써야 할 때

최신 브라우저는 SameSite를 명시하지 않은 쿠키를 기본 Lax로 취급합니다. 따라서 별도 설정 없이도 대부분의 CSRF는 완화됩니다. 결제 위젯, 외부 도메인 임베드, 서드파티 인증처럼 다른 사이트에서 쿠키가 꼭 필요한 경우에만 SameSite=None; Secure를 사용하세요.

  • SameSite=None인데 Secure가 없으면 최신 브라우저는 쿠키를 거부합니다.
  • 세션 쿠키에는 HttpOnly도 함께 두어 JavaScript 접근을 막는 것이 안전합니다.
  • 예: Set-Cookie: session=...; SameSite=Lax; Secure; HttpOnly

상황별 SameSite 선택표

실제 운영에서 마주치는 대표 시나리오와 권장 값, 그 이유를 정리했습니다.

사용 상황권장 값이유
같은 사이트 세션 / CSRF 방어Lax 또는 Strict교차 사이트 POST·fetch에 쿠키가 가지 않아 CSRF가 크게 줄어듭니다. 대부분의 일반 웹앱은 Lax로 충분합니다.
SSO / OAuth 리다이렉트(교차 사이트 이동 후 쿠키 필요)Lax최상위 GET 내비게이션에는 쿠키가 전송되므로, 외부 인증 공급자에서 돌아오는 리다이렉트 흐름이 정상 동작합니다.
임베드형 서드파티 위젯 / iframe에서 쿠키 필요None (Secure 필수)iframe·교차 사이트 요청에서도 쿠키를 보내야 하므로 None이 유일한 선택지이며, 반드시 HTTPS와 Secure가 함께 있어야 합니다.
최고 수준의 CSRF 안전성Strict교차 사이트에서 들어온 첫 요청에도 쿠키를 보내지 않습니다. 다만 외부 링크로 들어오면 로그인 상태가 풀린 듯 보일 수 있어 사용성이 떨어집니다.

실전 예시: 결제 iframe의 세션 끊김

쇼핑몰이 결제 단계에서 외부 PG사의 iframe을 띄우는데, 결제 화면을 열 때마다 사용자가 로그아웃된 것처럼 세션이 사라진다고 가정해 봅시다. 응답을 점검해 보니 세션 쿠키가Set-Cookie: pgsession=abc; SameSite=Lax; Secure로 내려가고 있었습니다.

  • 증상: 결제 iframe 안에서만 로그인 상태가 유지되지 않음.
  • 원인: iframe은 교차 사이트 컨텍스트라 Lax 쿠키가 전송되지 않음. (값을 비워 둬도 브라우저 기본이 Lax라 동일하게 끊깁니다.)
  • 조치: Set-Cookie: pgsession=abc; SameSite=None; Secure로 변경 → 교차 사이트 iframe에도 쿠키가 전송되어 세션이 유지됩니다.

자주 묻는 질문

SameSite를 지정하지 않으면 어떻게 되나요?
최신 브라우저(Chrome 80+ 등)는 SameSite 미지정 쿠키를 기본 Lax로 취급합니다. 즉 링크 클릭 같은 최상위 GET에는 전송되지만 교차 사이트 POST나 iframe에는 전송되지 않습니다.
SameSite=None을 쓰려면 무엇이 필요한가요?
반드시 Secure 속성과 함께 HTTPS로 내려야 합니다. Secure 없이 SameSite=None인 쿠키는 최신 브라우저가 무시하거나 거부합니다.
Strict와 Lax의 실질적 차이는 무엇인가요?
Strict는 외부에서 링크를 타고 들어온 첫 요청에도 쿠키를 보내지 않아 로그인 상태가 풀린 것처럼 보일 수 있습니다. Lax는 최상위 내비게이션 GET에는 쿠키를 보내 사용성을 유지하면서도 교차 사이트 POST는 차단합니다.
SameSite만으로 CSRF가 완전히 막히나요?
Lax/Strict는 CSRF를 크게 완화하지만 완전한 방어는 아닙니다. GET 기반 상태 변경, 일부 구형 브라우저, 같은 사이트 내 공격 등을 고려해 CSRF 토큰 등 추가 방어를 병행하는 것이 안전합니다.
입력한 값이 서버로 전송되나요?
아니요. 이 도구의 매트릭스와 Set-Cookie 예시 생성은 모두 브라우저 안에서만 처리되며, 선택한 값은 어디로도 전송되거나 저장되지 않습니다.

관련 도구

웹 보안