🍪 쿠키

2025. 3. 6. 00:27개발/💻 CS 지식

 

 

 

HTTP의 특성

 

HTTP는 클라이언트 서버 사이에 이루어지는 요청/응답 프로토콜이다

HTTP의 가장 큰 특징은 비연결성으로 요청에 대한 응답이 완료되면 서버와 클라이언트 간 연결이 완전히 끊어지며

서버는 클라이언트에 대한 정보를 완전 잃게 된다

이러한 특징 때문에 서버 단에서는 클라이언트를 알아볼 수 없게 되는데

여기서 문제가 발생하게 된다

매 요청마다 클라이언트에 대한 정보를 받아야 하게 되는 것이다

예를 들어, 네이버 메일을 보낼 때 메일 접속 > 메일 작성 > 메일 전송 의 모든 단계에서 로그인을 새로 해야 할 수도 있는 것이다

 

이러한 문제를 해결하기 위해 쿠키 라는 개념이 등장하게 된다

서버가 클라이언트를 알아볼 수 있도록 요청을 보낼 때마다 클라이언트에 대한 정보가 담긴 데이터 조각을 함께 보내는 것인데

이때 이 데이터 조각이 바로 쿠키다

 

쿠키

: 웹 서버에 의해 사용자의 컴퓨터(브라우저)에 저장되는 이름을 가진 작은 크기의 데이터이다

-  클라이언트는 이후 요청 시 쿠키를 함께 전송하여 상태 유지 가능(Stateful)

-  주요 사용 사례 : 세션 관리, 사용자 인증, 개인화된 설정 저장

 

 

 

 

쿠키의 주요 속성

 

쿠키는 Key-Value 형식이며, 4KB 이하의 데이터만 저장 가능하다 

쿠키는 HTTP의 Set-Cookie 헤더를 통해 설정하며 아래와 같은 속성들을 갖는다

 

쿠키의 주요 속성 소개

name=value 쿠키의 이름과 값
Expires 만료 날짜 지정 (UTC 형식)
Max-Age 쿠키의 유효 기간(초 단위) (Expires보다 우선 적용)
Domain 쿠키가 적용될 도메인 지정 (하위 도메인 포함 가능)
Path 쿠키가 전송될 경로 지정
Secure HTTPS에서만 전송
HttpOnly JavaScript에서 접근 불가 (XSS 공격 방지)
SameSite CSRF 방지를 위한 옵션 (Strict, Lax, None)

 

SameSite 설명

Strict 같은 사이트에서만 쿠키 전송. 외부 사이트에서 접근 불가. 강력한 방어
Lax 동일 사이트 내에서는 항상 전송, 외부 사이트에서 GET 요청일 경우만 전송. 기본 보안
None 모든 요청에서 전송되지만, Secure와 함께 사용해야 함. 없음 (주의 필요)

 

Spring에서 Cookie 생성

ResponseCookie cookie = ResponseCookie.from("sessionId", "abc123")
        .httpOnly(true)
        .secure(true)
        .path("/")
        .sameSite("Strict")
        .maxAge(Duration.ofDays(1))
        .build();

response.addHeader(HttpHeaders.SET_COOKIE, cookie.toString());

 

 

쿠키의 생성 위치 - First Party 쿠키, Third Party 쿠키 

 

퍼스트 파티 쿠키

-  사용자가 방문한 웹사이트에서 직접 생성한 쿠키

-  예: 사용자가 example.com을 방문하면, example.com에서 설정한 쿠키가 퍼스트 파티 쿠키

 

서드 파티 쿠키

-  사용자가 방문한 사이트와 다른 도메인에서 생성한 쿠키.

-  광고, 트래킹, 분석 도구 등에 사용됨.

-  예: example.com을 방문했을 때, ads.tracker.com에서 설정한 쿠키.

 

  퍼스트 파티 쿠키 서드 파티 쿠키
생성 주체 현재 방문한 사이트 (example.com) 외부 사이트 (ads.com, tracker.com)
용도 로그인 유지, 장바구니 저장, 개인 설정 광고 추적, 사용자 행동 분석, 리타겟팅
보안 위험 상대적으로 낮음 개인정보 침해 가능성 높음
브라우저 지원 기본적으로 허용됨 대부분의 최신 브라우저에서 차단

 

 

쿠키의 보안 이슈

1) XSS (Cross-Site Scripting)
공격자가 악성 JavaScript를 삽입하여 쿠키를 탈취
대응: HttpOnly 속성을 설정하여 JavaScript 접근 차단

2) CSRF (Cross-Site Request Forgery)
사용자가 원치 않는 요청을 강제로 실행하도록 유도하는 공격
대응: SameSite 속성을 Lax 또는 Strict으로 설정

3) 세션 하이재킹
네트워크에서 쿠키를 가로채 세션을 탈취하는 공격
대응: Secure 속성을 설정하여 HTTPS에서만 전송.

4) 쿠키 스푸핑
동일한 이름의 쿠키를 설정하여 기존 세션을 덮어씌우는 공격
대응: Domain 및 Path 속성을 올바르게 설정.

 

위와 같은 보안 이슈로 인해 서드 파티 쿠키는 점차 제한되는 추세이다