쿠키 보안 + 퍼스트 파티와 서드 파티

Park sang woo·2024년 1월 9일

📓 쿠키 보안

  1. HttpOnly

    • HttpOnly 속성 사용해서 쿠키에 JS 접근을 방지.
    • XSS 공격 보호
    • 쿠키는 웹 페이지의 JavaScript 코드에 의해 읽혀지고 조작될 수 있습니다. 이는 악의적인 공격자가 사용자의 쿠키를 도용하거나 조작하여 세션 하이재킹과 같은 보안 문제를 발생시킬 수 있다.
    Set-Cookie: 쿠키명=쿠키값; path=/; HttpOnly 
  2. Secure

    • 쿠키를 HTTPS 연결에서만 전송하도록 설정
    • 쿠키 정보가 암호화되어 전송하여 보안 강화
    • 브라우저가 HTTPS가 아닌 통신에서는 쿠키를 전송하지 못하도록 함.
    Set-Cookie: 쿠키명=쿠키값; path=/; secure
  3. SameSite 속성

    • 쿠키의 제한된 범위 내에서만 전송되도록 설정
    • Same-Origin 에서만 전송할지 여부
    • CSRF 공격 방지
    Set-Cookie: 쿠키명=쿠키값; path=/; SameSite=Strict

🏷️ Same-Origin

같은 출처라는 것이다.
출처는 프로토콜 + 호스트 + 포트로 되어있다.
ex) https://www.hello.com:8080

  • Scheme = https://
  • Host = www.hello.com
  • Port = 8080





📓 퍼스트파티

2가지 도메인이 있다. 현재 보고있는 페이지의 도메인(Site Domain) 과 쿠키를 가져온 도메인(Cookie Domain).
Cookie Domain은 즉 저장된 쿠키의 도메인이다.

사용자가 현재 보고있는 페이지의 도메인과 쿠키를 통해 가져온 도메인이 같은 경우.
== 사용자가 접속한 페이지와 같은 도메인의 쿠키가 전송됨.
현재 도메인에서 필요에 따라 설정한 쿠키.

즉 사용자가 직접 방문하거나 상호작용하는 웹사이트에서 사용되는 쿠키라고 생각하면 된다.

  • 서버로 전달한 데이터를 반환받은 다음 쿠키에 저장된 데이터를 그대로 요청하는 쿠키 방식.
  • 사용자가 방문한 웹사이트에서 직접 쿠키 파일을 발행.


ex) 사이트에 접속하여 로그인했을 때 로그인 상태가 유지, 쇼핑 카트 정보 유지 등에 사용.






📓 서드파티

현재 보고있는 페이지의 도메인과 쿠키를 통해 가져온 도메인이 다른 경우.
사용자가 접속한 페이지와 다른 도메인으로 쿠키가 전송됨.

  • 사용자가 방문한 사이트가 아닌 다른 웹사이트에서 발행.

많은 홈페이지들을 오가며 공통된 작업을 수행하는 Google Ads 광고 정보 등.


ex) 사용자가 a.com에 접속하고 있다. 근데 페이지 속에 z.com의 스크립트가 심어져 있다. 이 때 z.com은 사용자가 a.com을 방문했다는 정보를 담은 쿠키를 생성한다.
같은 사용자가 다른 b.com이라는 사이트에 방문하면 z.com의 스크립트가 심어져있고 z.com은 사용자가 a.com이라는 사이트의 사용 내역에 대한 정보를 쿠키로부터 가져올 수 있기 때문에 이 점을 활용하여 광고를 보여줄 수 있다.

그러면 z.com의 스크립크 삽입이 많아질수록 z.com은 사이트 방문자가 어떤 행동을 했는지 추적이 가능하다.

🏷️ 서드파티 사용 이유

다양한 홈페이지에서 동일한 쿠키값을 저장하고 요청하기 위해.
그래서 웹사이트와 외부 서비스 간의 협력을 통해 다양한 기능을 구현하는 데에 중요한 역할한다.



❗❓ <span style="color:blueviolet" 서드 파티 쿠키가 위험??

Cross-Site 요청 시, 서드파티 쿠키가 함께 전송된다면 문제 발생.

  • HTTPS 미사용일 때, 쿠키 탈취 가능 -> 해커가 클라이언트가 가지고 있는 쿠키에 대한 정보를 볼 수가 있다. 그러면 해당 사용자의 세션을 가져와서 무단으로 접근 가능.
    - 또한 데이터 암호화를 하지 않기 때문에 데이터 도청이 가능함. (민감한 정보 노출)

  • HTTPS 사용일 때, 쿠키 활용 가능






📓 SameSite

웹 브라우저 주소 란에 표시된 도메인과 동일한 도메인에 대한 요청 시에만 쿠키 전송.

  • 동일 사이트 (Same Site) 의 정확한 의미 : www.web.dev 와 static.web.dev 는 Same Site
  • 막지 않는다면 CSRF 공격으로 크로스 사이트 요청 시 크로스 사이트에 과거에 설정됐던 쿠키가 전송

서드파티 쿠키가 요청에 담겨 전송되는 것을 방지한다. 그래서 쿠키의 제한된 범위 내에서만 전송되도록 설정한다.

쿠키의 무차별 전송을 막아준다.

  • Strict
    • Same-Origin 쿠키 전송만 허용. 즉 동일 출처에서 요청 시에만 전송.
  • Lax
    • Cross-Origin 쿠키라도 특수 케이스엔 허용
    • 즉 동일 출처가 아닌 요청이라도 일부 예외 상황에서 전송 가능.
  • None
    • 모두 허용. 단 Secure 설정 강제. (CSRF 요청 시 HTTPS 미사용 시 문제)
    • 항상 동일 출처가 아닌 요청에도 전송되도록 허용.





❓❓ 질문 사항

Q1. 특정 웹 사이트를 들어갔을 때, 서드파트 쿠키는 어떠한 경우에 어떤 과정을 통해서 생성되는 건가요?

A1. 쿠키 동작 시나리오 <- 서드 파티가 있을 때


서드 파티 없이 일반 쿠키 동작 과정






실습 내용
🔖 https://www.notion.so/Set-Cookie-Header-MaxAge-Expires-Session-e2d2d39bedd042ba9641643ea46250a4

Reference

🔗 https://velog.io/@tjseocld/%EC%84%9C%EB%93%9C-%ED%8C%8C%ED%8B%B0%EC%99%80-%ED%8D%BC%EC%8A%A4%ED%8A%B8-%ED%8C%8C%ED%8B%B0-%EC%BF%A0%ED%82%A4%EC%99%80-%EB%B3%B4%EC%95%88 - 서드 파티와 퍼스트 파티 쿠키와 보안

🔗 https://brunch.co.kr/@dighty/4 - 퍼스트파티 쿠키,
기초부터 쓰는 방법까지!

profile
일상의 인연에 감사하라. 기적은 의외로 가까운 곳에 있을지도 모른다.

0개의 댓글