콘텐츠로 이동

2024 02 15

2024-02-15

참고: 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 헤더와 쿠키에 설정된 도메인이 다른 쿠키
      • 예시...
        1. naver.com에 접속했음
        2. naver.com에서 kakao.com이 제공하는 이미지인 kakao.com/img.jpg를 사용
        3. naver.com에 접속해있으니 kakao.com/img.jpg에 요청을 보냄
        4. naver.com에서 kakao.com에 대한 쿠키를 가지고 있다면 이를 서드파티 쿠키라고 부름
    • 퍼스트 파티 쿠키: 사용자가 접속한 페이지와 같은 도메인으로 전송되는 쿠키
  • 쿠키와 CSRF 문제
    • 크롬을 제외한 모든 브라우저는 http 요청에 쿠키를 전송하게 됨
      • HTML 문서 요청
      • HTML 문서에 포함된 이미지 요청
      • XHR/Form HTTP 요청 등
    • CSRF(Cross Site Request Forgery)
      1. 공격대상 사이트는 쿠키로 사용자 인증 수행
      2. 피해자는 공격대상 사이트에 로그인 되어 쿠키 있음
      3. 공격자는 피해자에게 그럴듯한 사이트 링크 전송해 누르게 함 (공격대상 사이트와 다름)
      4. 링크 누르면 HTML 문서 열리고, 이 문서가 공격대상 사이트에 HTTP 요청
      5. 쿠키가 이때 포함되어 공격대상 사이트에 전송되어, 해당 쿠키(사용자 권한)으로 맘껏 딴짓
  • SameSite
    • 서드 파티 쿠키의 보안적 문제를 해결하고자 만든 기술 : Cross-Site로 전송하는 요청의 경우 쿠키 전송에 제한을 둡시다!!
    • None: SameSite 탄생 전 동작 방식과 동일. 그냥 항상 전송
    • Strict: 해당 정책으로 설정된 쿠키는 Cross-Site 전송 불가
    • Lax: 서드 파티 대체적으로 전송 X, 몇가지 예외(GET + Top-Level Navigation)는 허락 O
  • 브라우저의 SameSite 구현
    • 크롬은 2020년 2월 4일 부터 SameSite Lax로 변경
    • None으로 사용하고자 한다면 Secure 쿠키일 것! (HTTPS 필수)