Post

쿠키 파티셔닝

어드민을 고치다가

스크린샷 2024-10-20 213329

개인 서비스에서 어드민 인증 방식이 토큰 기반이다. 그런데 헤더에 값을 들고 다니는데, 새로고침이나 잠깐 나갔다 오면 따로 저장을 안해놔서 로그인이 바로 풀린다. 가끔 귀찮은 상황이 발생해서 쿠키에 짱박으려고 서버쪽에서 쿠키값을 내려줬는데, 클라이언트 쪽에서 저장을 안하길래 뭘 빼먹었나 싶어서 값을 까봤다. 사실 이미 토큰값이 있기 때문에 굳이 서버쪽 Set-cookie 방식 말고 클라에서 쿠키 알아서 박아줘도 되는데, 코드 새로 짜기 귀찮아서 까봤다.

도메인쪽이랑 SameSite 이것저것 값 체크 중에 Partition Key Site라는 놈을 봤다. 그런데 처음 보는 옵션 같아서 얘는 뭔가 싶어서 한 번 알아봤다.

참고로 nginx가 서버 앞단에 존재한다면 헤더 이름에 언더스코어(_) 넣으면 인식 못한다.

1
underscores_in_headers on;

이 옵션 넣어줘야 인식한다. 그러니 이름 지을 땐 신중하게 잘 지어보자…

쿠키 파티셔닝이란?

언제 나왔나?

스크린샷 2024-10-20 215730

크롬 114 버전부터 릴리즈 된 기능이라고 한다. 비교적 신생아 기능이다.

스크린샷 2024-10-20 220003

참고로 114 버전은 대략 23.05 쯤에 스테이블 버전이 나온 것으로 보여진다. 현재 크롬 최신 스테이블 버전은 24.10.20일 기준으로 130 언저리다.

어떤 기능인가?

without-cookie-partitioni-bb0cbbf0c63d

서드파티 쿠키를 여러 도메인 간에 공유하지 않도록 사이트별로 격리, 파티셔닝하는 기술이라고 한다. 쉽게 말하면 다른 사이트 쿠키까지 가져오는 행위를 막은 것이다.

누가 남의 쿠키값을 그렇게 무차별적으로 다 가져오겠냐 싶지만, 대표적인 예로 예전에 페이스북이 자기들의 로그인, 좋아요 버튼 기능같은걸 활용할 수 있게 제공해주는 서드파티 스크립트나 페이스북 자사 서비스에 로그인 할 때 무지성으로 사용자 쿠키 수집하다가 뚜드려 맞고 과징금 낸 걸로 기억한다.

단순히 광고나 데이터 수집을 위한 쿠키 수집이라면 그나마 다행이다. xss 같은 해킹 공격에도 쿠키값 탈취가 이용된다.

그런 짓 못하게 막아주는 기술이라고 생각해도 무방하다.

with-cookie-partitioning-d3df97804f836

쿠키 파티셔닝은 사이트간 쿠키를 공유하지 못하게 막아준다. 심지어 A 사이트와 B 사이트에서 같은 서드파티 스크립트가 사용되더라도 파티션 키는 원본 도메인 기준으로 생성되기 떄문에 쿠키 데이터를 공유할 수 없도록 한다.

만약 같은 서드파티 스크립트를 사용하더라도, 파티션 키에 의해서 쿠키는 격리된다. 번외로 조금 더 살펴보면, 쿠키에는 SameSite라는 속성이 존재한다. Cross site 요청에서 어떻게 행동할 지 설정하는 속성인데, 값별로 다음과 같은 의미를 가진다.

  • Lax: 기본 설정, 사용자가 직접 링크를 클릭해 사이트에 들어오거나 같은 사이트 내의 요청에서는 쿠키가 전송됨. 그 외에는 쿠키가 전송되지 않음.
  • Strict: 같은 사이트에서만 쿠키가 전송됨. 그 외에는 쿠키가 전송되지 않음.
  • None: Cross-site 요청에도 쿠키가 전송됨.

여기서 드는 궁금점은 만약 SameSite=None을 주고 쿠키 파티셔닝이 활성화된다면 뭐가 우선순위로 작동할까인데, 쿠키 파티셔닝이 우선한다고 한다.

조작하면 되지 않을까?

쿠키 값이니까 사뿐히 우리가 마음대로 바꾸면 되지 않을까 싶지만, 파티션 키는 브라우저 내부에서 관리되는 정보여서 사용자나 서드파티 스크립트가 이 값을 직접 위조하거나 조작할 수 없다고 한다.

위에서 잠깐 말했듯이 파티션 키 자체는 웹사이트의 도메인 기반으로 브라우저가 자동으로 설정하는 값이기 때문에 A 사이트에서 B 사이트의 파티션에 접근할 수 없다고 한다. 그래도 궁금해서 한번 수동으로 바꿔봤다.

  • https://chips-site-b.glitch.me/

구글에서 샘플로 제공해주는 사이트라 들어가서 슥슥 바꿔봤는데 역시나 안된다. 하긴 애초에 브라우저에서 관리하는 값이면 우리가 건드려서 조작이 가능한 영역은 아니겠지??

스크린샷 2024-10-20 223519

궁금해서 내 사이트에 삽입된 광고 스크립트에도 설정되어 있나 싶어서 확인해봤는데, 존재한다.

그럼에도 불구하고 구글 광고는 이상할 정도로 맞춤형식으로 잘 뜨는것 같던데…? 오늘도 믿음으로 브라우저를 이용한다.

참고

  • https://developer.chrome.com/blog/new-in-chrome-114?hl=ko
  • https://chromestatus.com/feature/5179189105786880
  • https://developers.google.com/privacy-sandbox/cookies/chips?hl=ko
This post is licensed under CC BY 4.0 by the author.

© . Some rights reserved.

Using the Jekyll theme Chirpy