SameSite=Lax 쿠키는 일부 교차 사이트 맥락에서도 최상위 탐색과 안전 메서드 요청에 실릴 수 있습니다. 따라서 상태를 바꾸는 작업을 GET으로 만들면 안 됩니다.
same-site는 same-origin과 같지 않습니다. 형제 서브도메인은 서로 다른 origin이어도 같은 site로 분류될 수 있습니다. SameSite는 CSRF 방어의 한 층이며 중요한 변경 요청에는 별도 토큰이나 Origin 검증을 함께 검토합니다.
Lax는 모든 교차 사이트 요청을 막는 설정이 아닙니다
SameSite는 쿠키를 붙여 보낼 요청의 사이트 맥락을 제한합니다. Lax는 일반적인 교차 사이트 하위 리소스 요청과 일부 폼 전송에서는 쿠키를 제한하지만, 사용자가 링크를 눌러 이동하는 것 같은 최상위 탐색에서 안전 메서드 요청은 허용할 수 있습니다. 기본 쿠키 동작을 Lax로 취급하는 브라우저도 있으나, 기본값 동작은 명시적인 속성과 똑같다고 가정하지 말고 Set-Cookie를 확인해야 합니다.
same-site와 same-origin은 다른 경계입니다
origin은 scheme·host·port를 비교합니다. site 판정은 scheme과 등록 가능한 도메인 경계를 기준으로 하므로 https://a.example.test와 https://b.example.test는 서로 다른 origin이면서 same-site일 수 있습니다. 한 서브도메인이 침해되거나 느슨한 서브도메인에서 요청을 유도하는 상황을 고려하면, same-site라는 말만으로 요청 출처를 신뢰해서는 안 됩니다.
가상 요청에서 Lax 쿠키를 분류합니다
| 요청 상황 | 메서드·맥락 | Lax에서 기대할 점 | 설계 판단 |
|---|---|---|---|
| 외부 사이트 링크를 눌러 계정 화면 열기 | 최상위 탐색, GET | 쿠키가 포함될 수 있음 | GET은 조회 전용이어야 함 |
| 외부 페이지가 숨은 폼으로 송금 실행 | 교차 사이트 POST | 일반적으로 Lax 쿠키 제한 | 이 한 가지 동작에만 의존하지 말 것 |
| a.example.test가 b.example.test에 요청 | 서브도메인 간, same-site 가능 | 사이트만으로 차단된다고 단정 못함 | Origin·CSRF 토큰·권한 검토 |
GET·HEAD·OPTIONS·TRACE에는 상태 변경을 두지 않습니다
HTTP의 안전 메서드는 서버에서 관찰 가능한 상태 변경을 요청하지 않는다는 의미입니다. GET 링크를 열어 로그아웃하거나 이메일 주소를 바꾸는 설계는 이 계약과 충돌합니다. 링크 프리뷰, 검색 로봇, 사전 가져오기, 메일 보안 스캐너가 URL을 자동 방문할 수도 있습니다. 변경은 POST·PUT·PATCH·DELETE 같은 의도된 메서드와 CSRF 방어를 사용하고, 서버도 실제 권한과 요청 토큰을 확인해야 합니다.
검토할 때는 쿠키와 동작을 나눠 추적합니다
- Set-Cookie의 SameSite 값과 브라우저 기본값 의존 여부를 확인합니다.
- 요청을 시작한 site와 실제 origin을 각각 적습니다.
- 요청이 최상위 탐색인지 iframe·fetch·이미지 같은 하위 요청인지 구분합니다.
- HTTP method와 서버의 부수 효과를 나란히 적고 GET 등 안전 메서드에 변경이 없는지 확인합니다.
- 중요한 변경에는 CSRF 토큰, Origin 또는 Referer 검증 등 서버 측 방어가 있는지 점검합니다.
- 실제 지원 브라우저의 개발자 도구로 쿠키 전송을 확인하되, 개인정보 없는 테스트 계정에서 수행합니다.
쿠키가 안 붙는 한 사례를 CSRF 완전 방어로 확대하지 않습니다
Lax가 특정 교차 사이트 POST에서 쿠키를 제한하는 현상은 도움이 될 수 있지만, 브라우저마다 세부 동작과 예외가 다를 수 있습니다. same-site 서브도메인, 최상위 GET, 인증·로그아웃 링크 같은 다른 경로도 남습니다. 따라서 ‘Lax이므로 CSRF가 불가능하다’고 답하지 말고, 서버가 상태 변경 요청을 어떻게 검증하는지 확인해야 합니다.
복습: GET 링크로 계정 상태를 바꿔도 될까요?
문제: 외부 페이지의 링크가 로그인한 사용자의 프로필 이메일을 GET 요청으로 바꿉니다. SameSite=Lax 쿠키만으로 안전하다고 판단할 수 있나요?
정답: 아니요. 최상위 안전 메서드 탐색에 Lax 쿠키가 실릴 수 있으므로 GET은 조회 전용이어야 합니다. 변경 요청을 별도 메서드로 만들고 서버 측 CSRF 방어와 권한 검사를 적용합니다.
정답을 가리고 확인해 보세요
이 글을 위해 만든 학습 예시이며 공식 기출문제나 판매 카드의 인용이 아닙니다.
SameSite=Lax 쿠키를 쓰는 서비스에서 외부 링크가 /logout?confirm=1에 GET으로 접근하면 로그아웃되도록 만들었습니다. 무엇이 문제인가요?
정답과 해설 확인
최상위 교차 사이트 GET 탐색에도 Lax 쿠키가 포함될 수 있어 상태 변경을 보장 차단하지 않습니다. GET은 상태 변경에 쓰지 않아야 합니다.SameSite=Lax는 모든 사이트 간 이동을 막지 않습니다. 서버가 GET을 안전하고 읽기 전용으로 설계하고 변경 요청에 별도 CSRF 검증을 적용해야 합니다.