본문 바로가기

HTTP

쿠키 파헤치기

반응형

1) 정의

쿠키(Cookie)는 웹 서버가 사용자의 웹 브라우저에 저장하는 작은 데이터 조각으로, 주로 사용자 세션을 유지하거나 특정 사용자 정보를 저장하는 데 사용된다. 웹이 기본적으로 무상태(Stateless) 프로토콜이기 때문에, 쿠키는 사용자의 상태를 기억하는 역할을 한다.

쿠키는 주로 다음과 같은 용도로 사용된다:

  • 사용자 인증(Authentication): 로그인 상태 유지
  • 세션 유지(Session Management): 장바구니 정보 저장, 사용자 설정 유지
  • 트래킹(Tracking): 방문 기록 및 사용자 행동 분석

2) 쿠키의 동작 방식

쿠키는 클라이언트(웹 브라우저)와 서버 간의 HTTP 요청 및 응답을 통해 교환되며, 동작 과정은 다음과 같다.

  • 서버가 쿠키 설정
    • 사용자가 웹사이트에 처음 방문하면, 서버는 HTTP 응답(Response) 헤더에 Set-Cookie를 포함하여 쿠키를 생성한다.
    • 예시
    • Set-Cookie: session_id=abc123; Path=/; HttpOnly; Secure; Max-Age=3600
  • 브라우저가 쿠키 저장
    • 브라우저는 서버가 보낸 쿠키를 저장하고, 이후 동일한 도메인에 대한 요청 시 자동으로 포함한다.
  • 클라이언트가 쿠키 전송
    • 브라우저는 요청(Request)을 보낼 때 Cookie 헤더에 쿠키 값을 포함한다.
    • 예시:
    • GET /dashboard HTTP/1.1 Host: example.com Cookie: session_id=abc123
  • 서버가 쿠키를 확인하고 응답
    • 서버는 쿠키 정보를 확인하여 사용자 식별 및 세션 유지를 수행할 수 있다.

3) 쿠키의 속성

쿠키에는 다양한 속성이 있으며, 이를 통해 쿠키의 동작 방식을 제어할 수 있다.

속성 설명

Name=Value 쿠키의 이름과 값 (예: user_id=12345)
Expires 만료 날짜 (예: Expires=Wed, 09 Jun 2025 10:18:14 GMT)
Max-Age 쿠키의 유효 기간(초 단위, Max-Age=3600은 1시간 후 만료)
Domain 쿠키가 전송될 도메인 지정 (예: Domain=example.com)
Path 특정 경로에서만 쿠키 전송 (Path=/dashboard)
Secure HTTPS를 통해서만 쿠키 전송 가능
HttpOnly 자바스크립트에서 접근 불가 (document.cookie 사용 불가)
SameSite CSRF(Cross-Site Request Forgery) 방지 (Strict, Lax, None)

4) 쿠키의 유형

  • 저장 방식에 따른 분류
    • 세션 쿠키(Session Cookie):
      • 브라우저가 종료되면 삭제됨
      • Expires 또는 Max-Age 속성이 없음
      • 주로 로그인 세션 유지에 사용
    • 영구 쿠키(Persistent Cookie):
      • 특정 기간 동안 유지됨 (Expires 또는 Max-Age 설정)
      • 사용자가 브라우저를 닫아도 삭제되지 않음
  • 도메인 접근 범위에 따른 분류
    • 퍼스트 파티 쿠키(First-Party Cookie):
      • 사용자가 방문한 웹사이트에서 직접 설정한 쿠키
      • 예: 사용자가 example.com을 방문하면 example.com에서 설정한 쿠키
    • 서드 파티 쿠키(Third-Party Cookie):
      • 사용자가 방문한 웹사이트가 아닌 외부 도메인에서 설정한 쿠키
      • 주로 광고, 트래킹 및 분석 목적으로 사용됨
      • 예: example.com을 방문했는데 ads.example.net에서 쿠키를 설정함
  • 보안 속성에 따른 분류
    • 보안 쿠키(Secure Cookie):
      • Secure 속성이 설정된 쿠키
      • HTTPS(SSL/TLS) 연결에서만 전송됨
      • HTTP에서는 전송되지 않아 도청 공격을 방지할 수 있음
    • HttpOnly 쿠키(HttpOnly Cookie):
      • HttpOnly 속성이 설정된 쿠키
      • 자바스크립트에서 접근할 수 없음 (document.cookie 사용 불가)
      • XSS(크로스 사이트 스크립팅) 공격 방지에 유용

5) 쿠키와 보안 이슈

  • 쿠키 탈취(Cookie Theft)
    • 쿠키가 네트워크에서 평문(HTTP)으로 전송되면, 공격자가 가로채어 세션을 가로챌 수 있음.
    • 해결 방법:
      • Secure 속성을 추가하여 HTTPS로만 전송되도록 설정
      • HttpOnly 속성을 사용하여 자바스크립트에서 접근 불가능하게 설정
  • 세션 하이재킹(Session Hijacking)
    • 공격자가 사용자의 세션 쿠키를 탈취하면, 사용자의 계정에 무단으로 접근할 수 있음.
    • 해결 방법:
      • 세션 쿠키를 짧은 시간 내에 갱신 (Max-Age 설정)
      • IP 주소 변경 감지 및 강제 로그아웃
  • 크로스 사이트 스크립팅(XSS) 공격
    • 악성 자바스크립트가 실행되면, document.cookie를 통해 쿠키 값을 탈취할 수 있음.
    • 해결 방법:
      • HttpOnly 속성을 설정하여 자바스크립트에서 쿠키 접근 차단
      • 콘텐츠 보안 정책(CSP, Content Security Policy) 설정
  • 크로스 사이트 요청 위조(CSRF)
    • 사용자의 세션 쿠키를 악용하여 사용자의 의사와 무관한 요청을 서버에 보낼 수 있음.
    • 해결 방법:
      • SameSite 속성을 Strict 또는 Lax로 설정
      • CSRF 토큰을 사용하여 요청의 정당성을 확인

6) 쿠키 vs 세션 vs 로컬 스토리지 vs 세션 스토리지

구분 쿠키(Cookie) 세션(Session) 로컬 스토리지(LocalStorage) 세션 스토리지(SessionStorage)

저장 위치 브라우저 서버 브라우저 브라우저
데이터 유지 만료일까지 유지 브라우저 종료 시 삭제 수동으로 삭제 전까지 유지 브라우저 탭 종료 시 삭제
보안성 낮음(XSS 공격 가능) 높음(서버에서 관리) 낮음(XSS 공격 가능) 낮음(XSS 공격 가능)
용량 제한 4KB 제한 없음 5MB 5MB
서버 전송 여부 매 요청마다 전송됨 서버에서만 유지 서버로 전송되지 않음 서버로 전송되지 않음

7) 결론

쿠키는 웹 애플리케이션에서 사용자 상태를 유지하는 데 중요한 역할을 하며, 특히 인증 및 세션 관리에서 많이 사용된다. 그러나 보안 설정을 적절히 하지 않으면 해킹 및 공격의 대상이 될 수 있으므로, Secure, HttpOnly, SameSite 등의 속성을 적절히 설정하는 것이 중요하다.

또한, 쿠키 대신 세션, 로컬 스토리지 등 다른 저장 방식도 상황에 맞게 활용하는 것이 필요하다.

반응형

'HTTP' 카테고리의 다른 글

캐시 파헤치기  (1) 2025.02.06
세션 파헤치기  (0) 2025.02.06
토큰 파헤치기  (0) 2025.02.06
REST API  (0) 2023.04.12
HTTP란?  (0) 2023.04.12