2024 02 15
2024-02-15
Cookie SameSite
참고: https://seob.dev/posts/%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80-%EC%BF%A0%ED%82%A4%EC%99%80-SameSite-%EC%86%8D%EC%84%B1/
- 개요
- 쿠키: 브라우저에 데이터 저장하기 위한 수단 중 하나
- 요청에 대한 응답에
Set-Cookie가 있다면, 브라우저는 해당 값을 저장하고 이를 쿠키라 부름
- 쿠키에 도메인 설정하기
set-cookie: test=hello; Domain=hello
- ex) 카카오 로그인시 응답 헤더
_kawlt=token_value; Path=/; Domain=kakao.com; HttpOnly
- Domain: kakao.com 서비스에서 써달라는 거겠죠?
- HttpOnly: 브라우저에서 직접 접근을 못하게!
- 퍼스트 파티 쿠키 & 서드 파티 쿠키
- 서드 파티 쿠키: 사용자가 접속한 페이지와 다른 도메인으로 전송하는 쿠키
- Referer 헤더와 쿠키에 설정된 도메인이 다른 쿠키
- 예시...
naver.com에 접속했음
naver.com에서 kakao.com이 제공하는 이미지인 kakao.com/img.jpg를 사용
naver.com에 접속해있으니 kakao.com/img.jpg에 요청을 보냄
naver.com에서 kakao.com에 대한 쿠키를 가지고 있다면 이를 서드파티 쿠키라고 부름
- 퍼스트 파티 쿠키: 사용자가 접속한 페이지와 같은 도메인으로 전송되는 쿠키
- 쿠키와 CSRF 문제
- 크롬을 제외한 모든 브라우저는 http 요청에 쿠키를 전송하게 됨
- HTML 문서 요청
- HTML 문서에 포함된 이미지 요청
- XHR/Form HTTP 요청 등
- CSRF(Cross Site Request Forgery)
- 공격대상 사이트는 쿠키로 사용자 인증 수행
- 피해자는 공격대상 사이트에 로그인 되어 쿠키 있음
- 공격자는 피해자에게 그럴듯한 사이트 링크 전송해 누르게 함 (공격대상 사이트와 다름)
- 링크 누르면 HTML 문서 열리고, 이 문서가 공격대상 사이트에 HTTP 요청
- 쿠키가 이때 포함되어 공격대상 사이트에 전송되어, 해당 쿠키(사용자 권한)으로 맘껏 딴짓
- SameSite
- 서드 파티 쿠키의 보안적 문제를 해결하고자 만든 기술 : Cross-Site로 전송하는 요청의 경우 쿠키 전송에 제한을 둡시다!!
None: SameSite 탄생 전 동작 방식과 동일. 그냥 항상 전송
Strict: 해당 정책으로 설정된 쿠키는 Cross-Site 전송 불가
Lax: 서드 파티 대체적으로 전송 X, 몇가지 예외(GET + Top-Level Navigation)는 허락 O
- 브라우저의 SameSite 구현
- 크롬은 2020년 2월 4일 부터 SameSite
Lax로 변경
None으로 사용하고자 한다면 Secure 쿠키일 것! (HTTPS 필수)
- Chrome Schemeful SameSite