독립적인 파티션 상태가 있는 쿠키 (CHIPS)

개발자가 최상위 사이트마다 별도의 쿠키 저장소를 사용하여 '분할된' 스토리지에 쿠키를 사용하기로 선택할 수 있습니다.

구현 상태

브라우저 지원

  • Chrome: 114
  • Edge: 114.
  • Firefox 기술 미리보기: 지원됨
  • Safari: 지원되지 않음

소스

CHIPS란 무엇인가요?

Cookies Having Independent Partitioned State (CHIPS)를 사용하면 개발자가 최상위 사이트별로 별도의 쿠키 jar가 포함된 파티션을 나눈 저장소에 쿠키를 선택하여 사용자 개인 정보 보호 및 보안을 개선할 수 있습니다.

파티셔닝 없이 서드 파티 쿠키를 사용하면 서비스가 관련 없는 여러 최상위 사이트에서 사용자를 추적하고 정보를 조인할 수 있습니다. 이를 교차 사이트 추적이라고 합니다.

브라우저는 파티션을 나누지 않은 서드 파티 쿠키를 단계적으로 폐지하고 있으므로 서드 파티 쿠키가 차단되었을 때 iframe과 같은 크로스 사이트 컨텍스트에서 쿠키를 읽고 쓸 수 있는 유일한 방법은 CHIPS, Storage Access API, Related Website Set가 될 것입니다.

두 개의 웹사이트에서 요리를 공유하는 방법을 보여주는 다이어그램
쿠키 파티셔닝을 사용하지 않으면 서드 파티 서비스는 최상위 사이트 하나에 퍼간 경우 쿠키를 설정하고, 서비스가 다른 최상위 사이트에 삽입되었을 때 동일한 쿠키에 액세스할 수 있습니다.

CHIPS는 최상위 컨텍스트로 분할된 크로스 사이트 쿠키를 지원하기 위해 새로운 쿠키 속성 Partitioned를 도입합니다.

Set-Cookie 헤더:

Set-Cookie: __Host-name=value; Secure; Path=/; SameSite=None; Partitioned;

자바스크립트:

document.cookie="__Host-name=value; Secure; Path=/; SameSite=None; Partitioned;"

파티셔닝된 서드 파티 쿠키는 처음에 설정된 최상위 사이트에 연결되어 다른 곳에서 액세스할 수 없습니다. 이렇게 하면 서드 파티 서비스에서 설정한 쿠키는 처음 설정된 최상위 사이트의 동일한 삽입된 컨텍스트 내에서만 읽을 수 있습니다.

공통의 서드 파티를 삽입한 두 개의 서로 다른 웹사이트가 해당 서드 파티의 쿠키를 더 이상 공유하지 않음을 보여주는 다이어그램
쿠키 파티셔닝을 사용하면 하나의 최상위 사이트에 삽입되었을 때 쿠키를 설정하는 서드 파티 서비스는 서비스가 다른 최상위 사이트에 삽입되었을 때 동일한 쿠키에 액세스할 수 없습니다.

파티셔닝된 쿠키를 사용하면 사용자가 사이트 A를 방문하고 사이트 C의 삽입된 콘텐츠가 Partitioned 속성으로 쿠키를 설정할 때, 쿠키는 사이트 C가 사이트 A에 퍼갈 때 설정한 쿠키에만 지정된 파티션을 나눈 jar에 저장됩니다. 브라우저는 최상위 사이트가 A인 경우에만 해당 쿠키를 전송합니다.

사용자가 새 사이트(예: 사이트 B)를 방문하면 삽입된 C 프레임은 C가 사이트 A에 삽입될 때 설정된 쿠키를 수신하지 않습니다.

사용자가 최상위 웹사이트로 사이트 C를 방문하는 경우, C가 A에 삽입되었을 때 설정된 파티셔닝된 쿠키도 해당 요청에 포함되지 않습니다.

동일한 서드 파티가 두 개의 서로 다른 웹사이트에 삽입된 경우 쿠키가 공유되지 않음을 보여주는 다이어그램
쿠키 파티셔닝을 사용하면 사이트에 삽입될 때 쿠키를 설정하는 서드 파티 서비스는 사용자가 서비스를 최상위 사이트로 방문하더라도 동일한 쿠키에 액세스할 수 없습니다.

사용 사례

예를 들어 retail.example 사이트는 서드 파티 서비스인 support.chat.example와 협력하여 사이트에 지원 채팅 상자를 삽입할 수 있습니다. 오늘날 많은 채팅 서비스는 쿠키를 사용하여 상태를 저장합니다.

삽입된 채팅 위젯이 있는 웹사이트를 보여주는 다이어그램
서드 파티 서비스 support.chat.example가 삽입된 최상위 수준 사이트인 Retail.example

크로스 사이트 쿠키를 설정할 수 없으면 support.chat.example에서 상태를 저장할 대체 메서드(보통 더 복잡한 대체 메서드)를 찾아야 합니다. 또는 support.chat.example 스크립트가 인증 쿠키에 액세스하는 기능과 같이 Retail.example에 대해 승격된 권한을 가질 수 있으므로 위험이 발생하는 최상위 페이지에 삽입해야 합니다.

CHIPS는 파티션을 나누지 않은 쿠키와 관련된 위험 없이 크로스 사이트 쿠키를 계속 사용할 수 있는 더 쉬운 옵션을 제공합니다.

CHIPS의 사용 사례로는 크로스 사이트 하위 리소스에 다음과 같이 단일 최상위 사이트에서의 사용자 활동으로 범위가 지정된 세션 또는 영구 상태의 개념이 필요한 모든 시나리오가 포함됩니다.

  • 서드 파티 채팅 삽입
  • 서드 파티 지도 삽입
  • 서드 파티 결제 삽입
  • 하위 리소스 CDN 부하 분산
  • 헤드리스 CMS 제공업체
  • 신뢰할 수 없는 사용자 콘텐츠를 게재하기 위한 샌드박스 도메인(예: googleusercontent.com, githubusercontent.com)
  • 쿠키를 사용하여 퍼스트 파티 사이트의 인증 상태에 따라 액세스가 제어되는 콘텐츠를 제공하는 서드 파티 CDN (예: 서드 파티 CDN에서 호스팅되는 소셜 미디어 사이트의 프로필 사진)
  • 요청 시 쿠키를 사용하는 원격 API를 사용하는 프런트엔드 프레임워크
  • 게시자별로 범위가 지정된 상태가 필요한 삽입 광고(예: 해당 웹사이트에 대한 사용자의 광고 환경설정 캡처)

CHIPS에서 수신 동의 파티션 나누기 모델을 사용하는 이유

브라우저가 파티셔닝되지 않은 서드 파티 쿠키를 단계적으로 폐지함에 따라 파티셔닝을 위한 몇 가지 다른 접근 방식이 시도되었습니다.

Firefox는 ETP 엄격 모드와 시크릿 브라우징 모드에서 기본적으로 모든 서드 파티 쿠키를 파티셔닝하여 모든 교차 사이트 쿠키가 최상위 사이트에 의해 분할된다고 발표했습니다. 그러나 일부 서드 파티 서비스에서는 파티셔닝되지 않은 서드 파티 쿠키를 예상하는 서버를 구축했기 때문에 서드 파티의 선택 없이 파티셔닝 쿠키는 예기치 않은 버그를 유발할 수 있습니다.

이전에는 Safari에서 휴리스틱을 기반으로 쿠키를 파티셔닝하려고 시도했지만, 개발자 혼동을 이유로 결국 쿠키를 완전히 차단하기로 했습니다. 최근 Safari는 수신 동의 기반 모델에 관심을 보였습니다.

파티셔닝된 쿠키의 기존 구현과 달리 CHIPS는 서드 파티 선택입니다. (분할되지 않은) 서드 파티 쿠키가 지원 중단되면 교차 당사자 요청에 전송되도록 하려면 쿠키를 새 속성으로 설정해야 합니다.

서드 파티 쿠키가 여전히 존재하지만 Partitioned 속성을 사용하면 더 제한적이고 더 안전한 유형의 쿠키 동작을 선택할 수 있습니다. CHIPS는 서비스가 서드 파티 쿠키 없는 미래로 원활하게 전환할 수 있도록 지원하는 중요한 단계입니다.

현재 쿠키는 쿠키를 설정하는 사이트의 호스트 이름 또는 도메인(즉, 호스트 키)를 기준으로 키가 지정됩니다.

예를 들어 https://support.chat.example의 쿠키의 경우 호스트 키는 ("support.chat.example")입니다.

CHIPS에서 파티셔닝을 선택한 쿠키는 호스트 키와 파티션 키에 이중 키를 사용합니다.

쿠키의 파티션 키는 쿠키를 설정하는 엔드포인트에 대한 요청 시작 시 브라우저가 방문한 최상위 URL의 사이트 (스키마 및 등록 가능한 도메인)입니다.

앞에 https://support.chat.examplehttps://retail.example에 삽입되어 있는 예에서 최상위 URL은 https://retail.example입니다.

이 경우 파티션 키는 ("https", "retail.example")입니다.

마찬가지로 요청의 파티션 키는 요청 시작 시 브라우저가 방문하는 최상위 URL 사이트입니다. 브라우저는 해당 쿠키와 동일한 파티션 키가 있는 요청에 Partitioned 속성이 있는 쿠키만 전송해야 합니다.

이 예에서 쿠키 키는 CHIPS를 사용하기 전과 후의 모습입니다.

사이트 A와 삽입된 사이트 C는 파티셔닝된 쿠키를 공유합니다. 삽입되지 않으면 사이트 C는 파티셔닝된 쿠키에 액세스할 수 없습니다.
사이트 A와 삽입된 사이트 C는 파티셔닝된 쿠키를 공유합니다. 삽입되지 않으면 사이트 C는 파티셔닝된 쿠키에 액세스할 수 없습니다.

CHIPS 이전

key=("support.chat.example")

CHIPS 후

key={("support.chat.example"),("https", "retail.example")}

보안 설계

CHIPS를 사용하면 우수한 보안 관행을 장려하기 위해 쿠키가 보안 프로토콜을 통해서만 설정되고 전송됩니다.

  • 파티션을 나눈 쿠키는 Secure로 설정해야 합니다.
  • 파티셔닝된 쿠키를 설정할 때 __Host- 접두사를 사용하여 쿠키가 등록 가능한 도메인이 아닌 호스트 이름에 바인딩되도록 하는 것이 좋습니다.

예:

Set-Cookie: __Host-example=34d8g; SameSite=None; Secure; Path=/; Partitioned;

CHIPS의 대안

Storage Access API 및 관련 Related Website Set (RWS)는 특정 사용자 대상 목적을 위해 제한된 크로스 사이트 쿠키 액세스를 가능하게 하는 웹 플랫폼 메커니즘입니다.

이는 파티션을 나누지 않은 크로스 사이트 쿡에 대한 액세스가 필요한 CHIPS 파티셔닝의 대안입니다.

여러 관련 사이트에 삽입된 서비스에서 동일한 쿠키를 사용해야 하는 상황에서 Storage Access API 및 관련 웹사이트 세트를 고려해 보세요.

CHIPS는 서비스가 여러 사이트에서 격리된 구성요소 역할을 할 수 있는 기능을 제공하며, 이때 동일한 쿠키를 여러 사이트에서 사용할 필요가 없습니다. 서비스가 파티셔닝된 쿠키를 설정하는 경우, 파티션 키가 최상위 사이트가 되고 이 서비스를 사용하는 다른 사이트에서는 이 쿠키를 사용할 수 없습니다.

관련 웹사이트 세트 디자인은 Storage Access API를 사용하며 CHIPS 파티셔닝과 통합되지 않습니다. RWS 내 사이트 간에 공유된 쿠키 파티션에 의존하는 사용 사례가 있는 경우 GitHub 문제에 대한 예시와 의견을 제공할 수 있습니다.

데모

demo에서는 파티셔닝된 쿠키의 작동 방식과 DevTools에서 쿠키를 검사하는 방법을 설명합니다.

사이트 A는 자바스크립트를 사용하여 두 개의 쿠키(파티션을 나누지 않은 쿠키와 파티션을 나누지 않은 쿠키)를 설정하는 사이트 B의 iframe을 삽입합니다. 사이트 B는 document.cookie를 사용하여 해당 위치에서 액세스할 수 있는 모든 쿠키를 표시합니다.

서드 파티 쿠키가 차단되면 사이트 B는 크로스 사이트 컨텍스트에서 Partitioned 속성을 통해서만 쿠키를 설정하고 액세스할 수 있습니다.

서드 파티 쿠키가 허용되면 사이트 B에서도 파티션되지 않은 쿠키를 설정하고 액세스할 수 있습니다.

사이트 A 및 사이트 B
왼쪽: 서드 파티 쿠키가 차단되었습니다. 오른쪽: 서드 파티 쿠키가 허용됩니다.

기본 요건

  1. Chrome 118 이상
  2. chrome://flags/#test-third-party-cookie-phaseout에서 이 설정을 사용 설정하세요

DevTools를 사용하여 파티셔닝된 쿠키 검사

  1. https://chips-site-a.glitch.me를 방문합니다.
  2. Control+Shift+J (Mac의 경우 Command+Option+J)를 눌러 DevTools를 엽니다.
  3. 애플리케이션 탭을 클릭합니다.
  4. 응용 프로그램 > 스토리지 > 쿠키를 참조하세요.
  5. https://chips-site-b.glitch.me 아이콘을 클릭합니다.

DevTools에 선택한 출처의 쿠키가 모두 표시됩니다.

DevTools Application 탭에 있는 사이트 B의 쿠키

사이트 B는 크로스 사이트 컨텍스트에서만 파티셔닝된 쿠키를 설정할 수 있으며, 파티셔닝되지 않은 쿠키는 차단됩니다.

  • 최상위 사이트 https://chips-site-a.glitch.me의 파티션 키와 함께 __Host-partitioned-cookie가 표시됩니다.
__Host-partitioned-cookie의 파티션 키입니다.
  1. 사이트 B로 이동을 클릭합니다.
  2. DevTools에서 응용 프로그램 > 스토리지 > 쿠키를 참조하세요.
  3. https://chips-site-b.glitch.me 아이콘을 클릭합니다.
<ph type="x-smartling-placeholder">사이트 B</ph>
최상위 수준에서 사이트 B는 파티셔닝 및 파티셔닝되지 않은 모든 쿠키를 볼 수 있습니다.

이 시나리오에서는 최상위 컨텍스트에서 사이트 B에 있으므로 두 쿠키를 모두 설정하고 액세스할 수 있습니다.

  • unpartitioned-cookie에 빈 파티션 키가 있습니다.
  • __Host-partitioned-cookie 쿠키에는 파티션 키 https://chips-site-b.glitch.me가 있습니다.
<ph type="x-smartling-placeholder"></ph>
최상위 사이트인 B를 방문할 때 DevTools Application 탭에 있는 사이트 B의 쿠키. __Host-partitioned-cookie에는 파티션 키(https://chips-site-b.glitch.me)가 있습니다.

사이트 A로 다시 이동하면 unpartitioned-cookie가 브라우저에 저장되지만 사이트 A에서는 액세스할 수 없습니다.

  1. Site A로 이동을 클릭합니다.
  2. 네트워크 탭을 클릭합니다.
  3. https://chips-site-b.glitch.me 아이콘을 클릭합니다.
  4. Cookies(쿠키) 탭을 클릭합니다.

사이트 A에 있는 동안 최상위 사이트 https://chips-site-a.glitch.me의 파티션 키와 함께 __Host-partitioned-cookie를 볼 수 있습니다.

사이트 A에 삽입되어 있을 때 액세스할 수 있는 사이트 B iframe의 쿠키가 표시된 네트워크 탭

필터링을 통해 제외된 쿠키 요청 표시를 선택하면 DevTools에 파티션되지 않은 쿠키가 차단되었음을 나타내는 노란색 강조 표시와 '이 쿠키는 사용자 환경설정으로 인해 차단되었습니다'라는 도움말이 표시됩니다.

사이트 B iframe의 차단된 쿠키가 표시된 네트워크 탭
라는 메시지가 표시됩니다.

Application > 스토리지 > 쿠키(https://chips-site-b.glitch.me 클릭) 표시:

  • unpartitioned-cookie을 빈 파티션 키로 바꿉니다.
  • 파티션 키가 https://chips-site-a.glitch.me__Host-partitioned-cookie 쿠키
<ph type="x-smartling-placeholder"></ph>
DevTools Application 탭에 있는 사이트 B의 쿠키입니다. __Host-partitioned-cookie 쿠키에는 파티션 키 https://chips-site-a.glitch.me가 있습니다. unpartitioned-cookie이(가) 표시되지만 사이트 A에 삽입된 경우 사이트 B iframe에서 액세스할 수 없습니다.

쿠키 삭제

데모를 재설정하려면 사이트의 쿠키를 모두 삭제하세요.

  • Control+Shift+J (Mac의 경우 Command+Option+J)를 눌러 DevTools를 엽니다.
  • 애플리케이션 탭을 클릭합니다.
  • 애플리케이션 > 저장용량 > 쿠키로 이동합니다.
  • https://chips-site-b.glitch.me를 마우스 오른쪽 버튼으로 클릭합니다.
  • Clear(삭제)를 클릭합니다.

리소스