퍼스트 파티 쿠키 레시피

퍼스트 파티 쿠키를 설정하여 보안, 브라우저 간 호환성을 보장하고, 서드 파티 쿠키가 단계적으로 폐지된 후 서비스 중단 가능성을 최소화하는 방법을 알아보세요.

쿠키는 사용자의 컨텍스트에 따라 당사자 또는 타사 쿠키일 수 있습니다. 사용자가 머물고 있는 사이트에 따라 다릅니다. 쿠키의 등록 가능한 도메인 및 스키마가 현재 최상위 페이지(브라우저의 주소 표시줄에 표시되는 페이지)와 일치하는 경우, 쿠키는 페이지와 동일한 사이트에서 온 것으로 간주되며 일반적으로 퍼스트 파티 쿠키라고 합니다.

일반적으로 현재 사이트가 아닌 도메인의 쿠키를 서드 파티 쿠키라고 합니다.

예를 들어 설정한 쿠키가 사이트 전반에서 사용되지 않는 경우(예: 사이트에서 세션을 관리하는 데 사용되고 교차 사이트 iframe에서는 사용되지 않는 경우) 해당 쿠키는 항상 퍼스트 파티 컨텍스트에서 사용됩니다.

기본적으로 쿠키는 사이트 간에 공유되고, JavaScript로 액세스되며, HTTP 연결을 통해 전송될 수 있으므로 개인 정보 보호 및 보안 위험이 수반됩니다. 기본 동작을 개선하기 위한 작업이 계속 진행되고 있지만 개인 정보 보호 샌드박스출처 바운드 쿠키와 같은 기타 제안을 통해 쿠키에 추가 속성을 설정하여 지금 할 수 있는 일이 많습니다.

다음 구성은 대부분의 퍼스트 파티 쿠키에 대한 보안 및 교차 브라우저 호환성을 보장하기 위한 권장사항입니다. 그러면 필요한 경우에만 권한을 열도록 조정할 수 있는 안전한 기반을 마련할 수 있습니다. 이 문서에서는 특정 사용 사례에 대한 레시피 변형도 다룹니다.

레시피

Set-Cookie:
__Host-cookie-name=cookie-value;
Secure;
Path=/;
HttpOnly;
Max-Age=7776000;
SameSite=Lax;
세부정보

Host 는 선택적 접두사로, 일부 속성은 필수로 만들고 다른 속성은 금지합니다.

  • Secure이(가) 있어야 합니다.
  • Domain은(는) 생략해야 합니다.
  • Path/여야 합니다.

Host를 추가하면 브라우저에서 이러한 속성이 __Host 규칙에 따라 설정되었는지 확인하고, 그렇지 않은 경우 쿠키를 거부할 수 있습니다.

SecureHTTPS 연결을 통해서만 쿠키를 전송할 수 있도록 허용하므로 안전하지 않은 네트워크에서 쿠키가 도용되지 않도록 보호합니다. 아직 사이트를 HTTPS로 완전히 이전하지 않았다면 먼저 HTTPS로 이전하시기 바랍니다.

Domain 속성은 쿠키를 수신할 수 있는 호스트를 지정합니다. 생략하면 쿠키가 하위 도메인을 제외한 현재 문서 호스트로 제한됩니다. example.com의 쿠키는 example.com에 대한 모든 요청에서 전송되지만 images.example.com에 대한 요청 시에는 전송되지 않습니다. 서로 다른 하위 도메인에서 여러 앱을 실행하는 경우, 이렇게 하면 한쪽 도메인이 손상되어 다른 도메인으로 침투할 위험이 줄어듭니다.

Path는 브라우저가 Cookie 헤더를 전송하기 위해 요청된 URL에 있어야 하는 경로를 나타냅니다. Path=/를 설정하면 쿠키가 해당 도메인의 모든 URL 경로로 전송됩니다. DomainPath=/를 사용하지 않는 조합은 쿠키가 최대한 출처에 최대한 가깝게 바인딩되므로 LocalStorage와 같은 다른 클라이언트 측 저장소와 유사하게 동작합니다. example.com/aexample.com/b에 다른 값을 수신할 수도 있다는 혼동은 없습니다.

HttpOnly 속성은 JavaScript 액세스를 제한하여 사이트의 악성 서드 파티 스크립트에 대한 보호 조치를 추가합니다. 요청 헤더에만 쿠키를 전송하고 document.cookie를 사용하는 JavaScript에서 쿠키를 사용할 수 없도록 합니다.

Max-Age는 브라우저 세션이 꽤 오래 지속될 수 있고 오래된 쿠키가 영원히 남아 있는 것을 원하지 않으므로 쿠키의 수명을 제한합니다. 사용자 세션과 같은 단기 쿠키나 양식 제출을 위한 토큰과 같은 짧은 쿠키에 적합합니다. Max-Age는 초 단위로 정의되며 이전 예에서는 7776,000초(90일)로 설정되어 있습니다. 합리적인 기본값이며 사용 사례에 따라 변경할 수 있습니다.

SameSite=Lax는 동일한 사이트 요청에서만 쿠키가 전송되도록 제한합니다. 즉, 요청이 현재 브라우징 컨텍스트(사용자가 현재 방문 중인 최상위 사이트)와 일치하는 경우 주소 표시줄에 표시됩니다. 최신 브라우저에서는 SameSite=Lax가 기본값이지만 다른 기본값을 사용하는 브라우저 간 호환성을 위해 지정하는 것이 좋습니다. 쿠키를 동일 사이트로만 명시적으로 표시하면 쿠키가 퍼스트 파티 컨텍스트로 제한되므로 서드 파티 쿠키가 사라질 때 해당 쿠키를 변경할 필요가 없습니다.

다양한 쿠키 속성에 대해 자세히 알아보려면 MDN의 Set-Cookie 문서를 참조하세요.

하위 도메인이 있는 사이트가 있고 모든 하위 도메인에서 하나의 세션을 사용하려는 경우 Host 접두사를 너무 제한적일 수 있습니다. 예를 들어 news.site에는 finance.news.sitesport.news.site와 같은 주제에 대한 하위 도메인이 있을 수 있으며 모든 하위 도메인에서 하나의 사용자 세션을 만드는 것이 좋습니다. 이 경우 __Host 대신 __Secure 접두사를 사용하고 Domain를 지정합니다.

레시피

Set-Cookie:
__Secure-cookie-name=cookie-value;
Secure;
Domain=news.site;
Path=/;
HttpOnly;
Max-Age=7776000;
SameSite=Lax;
세부정보

Secure 는 선택적 접두사로, Host보다 적은 요구사항을 어설션합니다. Secure 속성을 사용하여 쿠키를 설정하기만 하면 됩니다.

SameSite=Lax 쿠키는 크로스 사이트 하위 요청 (예: 서드 파티 사이트에서 삽입된 이미지 또는 iframe을 로드할 때)에 전송되지 않지만 사용자가 원본 사이트로 이동할 때 (예: 다른 사이트의 링크를 따라갈 때) 전송됩니다.

SameSite=Strict를 사용하여 쿠키 액세스를 더욱 제한하고 서드 파티 웹사이트에서 시작된 요청과 함께 쿠키 전송을 허용하지 않을 수 있습니다. 이 기능은 비밀번호 변경 또는 구매와 같이 초기 탐색 단계 후에 항상 기능과 관련된 쿠키가 있는 경우에 유용합니다.

레시피

Set-Cookie:
__Host-cookie-name=cookie-value;
Secure;
Path=/;
HttpOnly;
Max-Age=7776000;
SameSite=Strict;