반응형

특정 URL을 호출하며 쿠키를 전송하려고 하는데 전송이 안 된다..?

일단 현재 페이지와 호출하려는 URL, 쿠키의 도메인에 따라서 전송가능 여부가 달라진다.

 

확인해야 할 사항

현재 페이지의 도메인, 프로토콜 &  호출하려는 URL의 도메인, 프로토콜 확인

  쿠키 전송 방향 도메인 프로토콜 쿠키 전송 가능 여부
1 https://site.example.com https://site.example.com 같음 같음 그냥 됨
2 https://site.example.com http://site.example.com 같음 다름 크로스 사이트로 간주함.
교차스킴 정책 참고
3 https://site.example.com  https://site.test.com 다름 같음 크로스 사이트로 간주함.
교차스킴 정책 참고
4 https://site.test.com https:// site.example.com 다름 다름 크로스 사이트로 간주함.
교차스킴 정책 참고

* 크로스 사이트(cross-site) 
  호출하는 URL이 도메인이 다른경우 혹은 http, https 와 같이 사용하는 프로토콜(scheme)이 다른 사이트의 경우
* 서드파티 쿠키
  사용자가 접속한 페이지와 다른 도메인에서 발행한 쿠키
* 퍼스트파티 쿠키
  사용자가 접속한 페이지의 도메인에서 발행한 쿠키

 

일반적으로 크로스 사이트(Cross-site)로의 쿠키전송은 안 됨. 서드파티 쿠키전송이 안 됨.

하지만 쿠키의 SameSite 속성 설정으로 서드파티 쿠키 전송을 가능하게 할 수 있다. 

 

* SameSite 속성
  SameSite 속성은 크로스사이트 요청에서 쿠키 전송을 제한하는 기능을 한다.

 

 

쿠키 생성 시 SameSite 속성 설정하는 예시

javascript

document.cookie = "mycookie=testContent; domain=example.com; Path=/; SameSite=None; Secure;"

 

JAVA

@RequestMapping(value = "/test/setCookieTest")
	public HttpServletResponse setCookieTest(HttpServletRequest request, HttpServletResponse response) throws Exception {
	String cookieValue = "CookieTest=CookieTest; Max-Age=3600; Path=/; SameSite=Lax";  
	Domain="example.com;";
	response.addHeader("Set-Cookie", cookieValue);
	return response;
}

 

SameSite 속성값 설명
none none으로 설정된 쿠키의 경우 크로스 사이트 요청의 경우에도 항상 전송됨
Secure 속성을 꼭 함께 붙여줘야 함
Strict 크로스 사이트 요청에는 항상 전송되지 않음
Lax 몇 가지 예외적인 요청에만 전송됨
예)
<a>를 클릭해서 이동
windows.location.replace 로 자동으로 이동
302 리다이렉트를 통한 이동
<iframe>이나 <img>를 삽입할 때 발생되는 http 요청은 쿠키 전송 안 됨.

 

samesite 속성이 Lax이거나 None이며 secure 속성도 넣었는데 전송이 안된다면...?

아래 교차스킴 정책을 참고해보자..

 

반응형

 

교차스킴 유형에 따른 쿠키 전송 정책

* 교차스킴
URL이 모두 동일한 등록 가능 도메인(예: site.example)을 가지고 있지만 
스킴(프로토콜)은 서로 다르며(예: http://site.example과 https://site.example), 이를 교차 스킴이라고 한다.

2020년 이후로 구글에서 교차스킴에 대한 쿠키전송 정책을 변경한다고 했다.
이제 도메인이 같아도 프로토콜이 다르면 크로스사이트로 간주한다 이말인듯

아래의 교차 스킴 유형에 따라 쿠키 전송을 위한 SameSite 속성값이 다름..

 

1) case 1 - Navigation

페이지 이동하는 경우라고 생각하면 될 듯하다.
하이퍼링크를 클릭해서 페이지를 이동하거나
<a>를 클릭해서 이동하거나 windows.location.replace 로 자동으로 이동하거나,
302 리다이렉트를 통한 이동을 포함함.
쿠키의 SameSite 값에 따라 쿠키가 전송될수도, 안 될수도 있다.

 

2) case 2 - 하위 리소스 요청

페이지 내에서 iframe이나 script, fetch, XMLHttpRequest를 통해 url을 요청하는 경우

 

3) case3 - POST양식 submit

form데이터를 POST 전송하는 경우이다.

 

아무리 정리해봐도 넘 헷갈리는...

틀린 부분이 있으면 댓글로 알려주십셔

 


참고

https://web.dev/i18n/en/schemeful-samesite/

 

Schemeful 동일 사이트

"동일 사이트"의 정의는 URL 체계를 포함하도록 진화하고 있습니다. 따라서 사이트의 HTTP와 HTTPS 버전 간의 링크는 이제 크로스 사이트 요청으로 계산됩니다. 가능한 한 문제를 방지하기 위해 기

web.dev

https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content

 

Mixed content - Web security | MDN

When a user visits a page served over HTTPS, their connection with the web server is encrypted with TLS and is therefore safeguarded from most sniffers and man-in-the-middle attacks. An HTTPS page that includes content fetched using cleartext HTTP is calle

developer.mozilla.org

 

반응형

+ Recent posts