Cookie SameSite 설정하기 SameSite 관련 경고

DIORJJ·2023년 1월 8일
3

Cookie

목록 보기
1/1
post-thumbnail

프로젝트 개발을 하다 콘솔창위에 문제라는 탭을 발견했다,그곳에 빨간표시로 경고메지시가 있었다.
살펴보니

Indicate whether to send a cookie in a cross-site request by specifying its SameSite attribute

Because a cookie’s SameSite attribute was not set or is invalid, it defaults to SameSite=Lax, which prevents the cookie from being sent in a cross-site request. This behavior protects user data from accidentally leaking to third parties and cross-site request forgery.
Resolve this issue by updating the attributes of the cookie:
Specify SameSite=None and Secure if the cookie should be sent in cross-site requests. This enables third-party use.
Specify SameSite=Strict or SameSite=Lax if the cookie should not be sent in cross-site requests.

이런경고메시지가 떳다.구글번역에 돌려보니
쿠키의 SameSite의 속석값을 바꾸라는 메시지였다.

이방법을 잘몰라서 구글에 검색해 방법을 찾아보았다.
다른분들의 해결방법을 이글에 적어본다.

20년 2월 4일 릴리즈된 구글 크롬(Google Chrome)80버전부터 새로운 쿠키 정책이 적용 되어 Cookie의 SameSite 속성의 기본값이 "None"에서 "Lax"로 변경되었다.

SameSite 를 None 으로 설정할 경우 모든 도메인에서 쿠키를 전송하고 사용할 수 있지만 사용자가 사이트 간 요청 위조(CSRF - Cross-site request forgery) 및 의도하지 않은 정보 유출에 취약해질 가능성이 있습니다. 이러한 취약점을 방지하기 위해 지금까지는 별도의 SameSite 속성 명시 없이 쿠키를 생성했을 때 "SameSite=None" 으로 설정한 것과 동일하게 동작 했지만 Chrome80 버전 이후에는 SameSite 속성 설정이 없는 쿠키는 "SameSite=Lax" 로 명시한 것과 동일하게 동작한다는 것입니다.

기본 보안 설정이 올라 감에 따라 결제(PG)나 인증 모듈 등의 써드파티 시스템과 연계된 서비스가 정상적으로 동작하지 않을 수 있다.

이후 Firefox, Edge 등 다른 브라우저도 Chrome 과 동일한 설정으로 기본값을 변경한다고 하니 이참에 내용을 알아두시면 좋을 것 같다.

SameSite

SameSite는 말 그대로 쿠키 전송에 있어 '같은 사이트'인지 체크하는 것입니다.
Cookie의 SameSite 속성은 서로 다른 도메인간의 쿠키 전송에 대한 보안을 설정한다.

"None"은 동일 사이트과 크로스 사이트에 모두 쿠키 전송이 가능하다. 그리고 "Strict"로 설정할 경우 서로 다른 도메인에서는 아예 전송이 불가능해 지기 때문에 CSRF를 100% 방지할 수 있으나 사용자 편의성을 많이 해치게 된다.

Strict는 같은 사이트에서만 쿠키 전송, Lax는 허용한 사이트와 같은 사이트에서만, None은 모든 사이트에서를 의미한다.

그래서 Strict 설정에 일부 예외( HTTP get method / a href / link href )를 두어 적용되는 설정이 이번에 기본값으로 변경되는 "Lax" 이다.

브라우저에서 기본 설정을 변경한 것은 크로스 도메인간 중요한 정보 유지는 CSRF 가능성이 있는 쿠키가 아닌 다른 안전한 방식으로 하기를 권장한다. 제안하는 대로 Lax 설정에서도 문제 없게끔 쿠키에 대한 의존성을 낮추는 것이 권장 되지만 바로 수정개발이 힘든 경우는 쿠키의 SameSite설정을 기존의 기본값이었던 None으로 설정하여 임시로 해결 할수있다고 한다.

SameSite 설정하기

SameSite 속성을 변경하는 방법은 쿠키 생성하는 시점부터 설정해 주거나 필터 등을 이용하여 기존 쿠키에 속성을 추가하는 방법이 있고 Apache 또는 Nginx 같은 HTTP / Proxy 서버를 사용중이라면 서버 설정을 통해 일괄로 변경하는 것도 가능하다.

1. JavaScript


document.cookie = "safeCookie1=foo; SameSite=Lax"; 
document.cookie = "safeCookie2=foo"; 
document.cookie = "crossCookie=bar; SameSite=None; Secure";

SameSite 속성을 명시한 safeCookie1와 명시하지 않은 safeCookie2는 크롬80 이상부터 동일하게 동작한다. (Default Lax 적용)

주의해야할 점은 SameSite 속성을 None으로 설정할 경우 Secure 속성을 함께 추가해 주어야 한다. Secure 속성이 추가된 쿠키는 HTTPS 프로토콜에서만 전송이 가능하며 SameSite가 None이지만 Secure 속성이 없을 경우 브라우저에서는 아래의 경고메시지와 함께 해당 쿠키를 적용하지 않는다.

This set-cookie had the "SameStie=None" attribute but did not have the "Secure" attribute. which is required in order to use "SameSite=None" 

2. Java Application

자바는 제가 아직 잘 알지못하여 생략하겠습니다.

3. WEB Server 설정 [ Proxy / HTTP Server ]

Apache 또는 Nginx 같은 HTTP 웹서버나 Proxy 서버를 사용중이라면 서버 설정을 통해 유저가 받는 모든 쿠키 속성을 한 번에 변경 할수 있다.

Apache Configuration

Header always edit Set-Cookie (.*) "$1; Secure; SameSite=None;"

Nginx configuration

location / { # your usual config ... # hack, set all cookies to secure, httponly and samesite (strict or lax) proxy_cookie_path / "/; secure; SameSite=None"; }

WEB Server 설정은 나중에 저에게 도움이 되기위해 추가 하였습니다.

여기 두분의 글을 보고 참고하여 쓴글입니다.
출처: https://ifuwanna.tistory.com/223 [IfUwanna IT]
출처: https://darrengwon.tistory.com/647

profile
상상을 현실로 만드는디벨로퍼

0개의 댓글