[WebKit] iOS 14의 개인 정보 보호 정책과 third party cookie 이슈

Storage Access API 를 이용해서 쿠키 정보를 가져옵시다

naljin
4 min readFeb 19, 2021

TL; DR

iOS 14 부터 개인 정보 보호 정책으로 third party cookie 사용이 막힘. 이에 파생되는 이슈에 대해선 Storage Access API 를 사용

쿠키 배경 지식

First-party cookie

  • 유저가 website 를 방문할때마다 생성됨.
  • website에 따라 쿠키에 무엇을 수집하고 저장할지 결정함으로서 유저 경험을 향상시키고자 함. (만약 쿠키가 없다면 새로 고침 때마다 로그인 다시 하거나, 장바구니 다시 담아야함)

Third-party cookie

  • 현재 유저가 방문한 웹 사이트 외 다른 곳에 의해 생성된 쿠키.
  • 유저가 들어간 A / B 도메인에서 각각 facebook.com 에서 코드를 로드하고 있다면, facebook.com 에 해당하는 쿠키가 자체적으로 생성될 수 있는데 이것이 third-pary cookie. (ex. ‘facebook에 공유하기’ 컴포넌트를 사용할때 facebook.com 에서 코드를 로드)
  • 해당 쿠키를 통해 facebook.com 에서도 원래 도메인에서 (A / B 도메인) 유저가 무엇을 보고, 클릭했는지 등 다양한 정보를 모을 수 있고, 다양한 third-party tracker를 사용할 수 있음.
  • 그러니까 ‘facebook 으로 공유하기’ 버튼이 있는 웹사이트가 많을 수록 facebook.com 은 많은 유저의 개인 정보를 얻을 수 있음. -> 해당 데이터 이용해서 맞춤 광고 가능

웹 배경 지식

  1. iframe (inline frame)을 이용해서 하나의 페이지 안에 또 다른 도메인(B) 페이지 삽입 가능.
  2. iframe 내의 데이터를 불러올 때는 다른 도메인(B)으로 request를 쏘는데(cross-site request), 이때 B에 속하는 쿠키(third-party cookie)가 있다면 헤더에 포함돼서 전송됨.
  3. 한편 iOS 14 및 iPadOS 14 부터 새로운 개인정보 보호 정책 발표.
  4. 이 중에는 “모든 브라우저에서 크로스 사이트 추적 방지(Prevent Cross-Site Tracking) 활성화” 내용이 포함
  5. 크로스 사이트 추적 방지가 되어있으면, B 도메인의 쿠키가 세팅되어있어도, 해당 쿠키 이용 불가
  6. 세팅 > 사파리 > 크로스 사이트 추적 방지에서 설정 가능

발생 가능한 문제

  1. A 페이지(top frame) 안에 B 페이지가 iframe 으로 구현되어 있음
  2. B 페이지 정보 불러올때는 어딘가 저장되어있는 쿠키 값을 헤더에 보내야하는 상황.
  3. 하지만 B 페이지는 애플의 크로스 사이트 추적 방지 정책 상 저장된 쿠키 값 못 넘겨받음 (third party cookie)

해결 방법

웹에서 Storage Access API 를 사용해서 유저가 내장된 third-party와 인터렉션 할 때 third-party가 first-party 쿠키를 요청하게 한다!

APPLE 관련 문서

  1. Intelligent Tracking Prevention (ITP)

자기 도메인(A)에서 다른 도메인(B) 정보 가져올 수 있는데 그걸 cross-origin, cross-site 로딩이라함. 근데 문제는 이런 로딩이 유저가 원하지 않는 tracking도 허용하게 한다는거. 따라서 Cross Site Tracking 못하게 막을거야!

2. Introducing Storage Access API

저번에 ITP 발표했지. 이에 대해 가장 강력했던 개발자 피드백은 내장된 다른 사이트에서 이미 first party에서 로그인한 유저를 인증하기 위한 방법을 제공하란 거였어. 그래서 Storage Access API 라는 솔루션을 제공해줄게! 이제 유저가 third-party와 인터렉션 할 때 이 API를 이용해서 third-party가 first pary 쿠키를 요청하면 돼!

cf) 여기서 Storage Access란 iframe이 first-party 쿠키에 액세스할 수 있음을 의미

참고 문서

--

--