Code Logs

22.03.06

CHIPS - Cookies Having Independent Partitioned State
(Chrome 98 버그를 찾아 헤매다 발견하게 된 브라우저의 Cookie 관리 정책)
고양이 빵 Cat bread - 세마리의 고양이와 홈베이킹 이야기

브라우저 보안 정책 CHIPS - (feat. Chrome 쿠키 입력 불가)

CHIPS - Cookies Having Independent Partitioned State (Chrome 98 버그를 찾아 헤매다 발견하게 된 브라우저의 Cookie 관리 정책)

Table of contents

  1. CHIPS
  2. 나도 모르게 흘러간 내 정보 - Site간 cookie 공유
  3. YouTube가 내 말을 옅듣고 있다?!
  4. 왜 내 정보를 가져가는가?
  5. Cookie는 분리된 상태로 관리되어야 한다
    1. Scenario
  6. 별첨 - Chrome 브라우저 cookie 입력 불가

CHIPS

얼마전 Chrome 업데이트를 마치고 (v98.0.4758.109) 개발자 도구의 UI를 통해 새로운 쿠키를 입력 할 수 없었다. 원인이 무엇인지 찾아 보다가 CHIPS 보안정책에 대한 이야기를 접하게 됐다. (Cookie 값을 추가 할 수 없는 문제의 원인은 CHIPS 관련 기능 개발에 버그가 있기 때문)

CHIPS가 어떤 것인지 그리고 CHIPS와 실질적으론 무관하지만 v98.x 버전의 크롬에서 UI를 통해 cookie를 입력 할 수 없을때 조치 사항에 대해 기록한다.

웹사이트는 여러 embedded 된 다른 origin에 대한 접근을 수행한다. 조금 풀어서 이야기하면 내가 접속한 사이트의 내부에 또 다른 사이트가 동작하고 있다는 의미이다.

많은 웹사이트 또는 웹애플리케이션에서 iframe, Facebook 좋아요 버튼 또는 Google Ads 같은 것들을 포함하고 있는데 이것들이 현재 내가 접근한 사이트가 아닌 또 다른 사이트로의 접근을 시도하는 것이다.

앞서 말한 iframe, Google Ads, Facebook 좋아요 버튼 외 다수의 요소들은 단순히 사이트 내부에 존재하는 것을 넘어 특정 사이트로의 요청을 보내게 된다.

그 요청의 결과는 일련의 형태로 쿠키에 저장되고 이렇게 저장된 정보를 통해 해당 사이트들은 사용자의 활동을 모니터링 할 수 있다.

사용자는 A 사이트에 접근 했지만 A 사이트에 심어져 있는 특정 요소들에 의해 사용자의 활동이 쿠키에 기록되고 이렇게 저장된 정보를 (예컨데 현재 사용자가 A 사이트에 언제 방문 했음) 다른 사이트에서 확인 할 수 있는 것이다.

YouTube가 내 말을 옅듣고 있다?!

YouTube를 보며 혼잣말을 하면 Google의 광고가 내가 한 말과 관계된 상품을 노출하기 시작한다는 이야기가 있다. (만약 이게 사실이라면 정말 큰일이다. 그럴리 없다고 생각하지만) 우스갯 소리로 치부하는 이야기 일 수 있지만 이와 유사한 일이 실제 웹 환경에서 일어나고 있다.

나는 A 사이트에 접근 했는데 B 사이트 마저도 나에 대해서 알고 있기 때문이다.

왜 내 정보를 가져가는가?

상당수의 사람들은 A 사이트를 접근했다는 이유만으로 나와는 관계없는 B 사이트에서 내 정보를 가져간다는 것이 탐탁지 않을 것이다.

그럼 왜 내 정보를 가져갈까?

너무 당연한 이야기지만 사용자 경험을 개선하기 위함이라 말할 수 있을 것이다. 내가 A 사이트에서 제공(?)한 내 정보를 바탕으로 다른 사이트에서도 해당 사용자에게 특화된 정보를 노출하기 위함이다. (예를들면 내가 쇼핑몰에서 검색한 상품과 관계된 제품이 광고로 노출 되는 것과 같은) 물론 사이트 오너에게는 더욱 적극적인 마케팅의 수단으로 사용되기도 한다.

긍정적인 측면에서 바라본다면 쏟아지는 정보 속에서 내가 관심 있는 정보를 좀 더 쉽게 찾을 수 있다는데 있지만 부정적인 인식을 갖는 사람들도 있을 것이다.

쿠키를 통한 사용자 정보의 공유는 당연히 보안 이슈, 개인정보 이슈와 밀접하게 관계되어 있으며 개인정보 보호를 위해 이러한 것들을 방지해야 한다는 것이 일각의 의견이다.

그리고 이것을 방지하는 기술이 바로 CHIPS다.

Cookie는 분리된 상태로 관리되어야 한다

쿠키들은 분리된 상태로 관리되어야 한다는 것이 이 기술의 골자로 embedded 된 다른 origin으로 부터 생성된 쿠키에 대한 정보는 top-level 사이트의 origin이 동일할 때에만 접근 가능하도록 해야한다는 것인데 아래 Scenario를 통해 생각해 본다면 좀 더 이해하기 쉽다.

Scenario

  • A 사이트B 사이트는 모두 Facebook 좋아요 버튼을 내장하고 있다.
  • A 사이트로 접근한 사용자는 Facebook 좋아요 버튼에 의해 어떤 쿠키를 저장하게 된다.
  • 이제 사용자는 B 사이트에 접속한다.
  • B 사이트에도 마찬가지로 Facebook 좋아요 버튼이 있고 그 버튼은 쿠키에 접근해 사용자의 활동 이력을 조회하려 한다. (A 사이트에 접근한 적이 있는지를 확인 할 수 있다)

위와 같은 시나리오에서 CHIPS가 적용되지 않은 브라우저라면 B 사이트A 사이트에서 만들어진 쿠키 정보를 불러 올 수 있지만 CHIPS가 적용된 브라우저라면 쿠키 정보를 불러 올 수 없다. (정확히 말하면 브라우저가 서버로 전송하지 않는다.)

왜냐하면 A 사이트에서 만들어진 쿠키는 top-level 사이트 즉, 해당 쿠키가 생성될 때 접속했던 사이트가 A 사이트지만 현재 사용자가 접근한 top-level 사이트는 B 사이트이고 쿠키의 top-level 사이트의 origin이 일치하지 않기 때문이다.

크롬 브라우저의 개발자 도구를 (chrome v98.x) 통해 쿠키를 입력할 수 없는 버그가 있었다. 해당 버그는 chrome://flags로 접속해 Partitioned cookies 설정을 disabled 처리하면 해결 할 수 있다. (이 flag 설정과 관계된 기능 개발 과정중 발생한 버그로 보인다. 실제 이 기능과 개발자 도구를 통한 쿠키 입력은 무관하다.)

또 다른 방법은 개발자 도구의 console을 통해 쿠키를 직접 입력하는 방법이 있다.

document.cookies = 'key=value'

참고

댓글