네트워크 | 쿠키와 세션

Faithful Dev·2025년 1월 30일

컴퓨터 공학

목록 보기
75/81

쿠키(Cookie)란?

쿠키클라이언트(브라우저)에 저장되는 작은 데이터 파일로, 사용자의 상태를 유지하는 데 사용된다.

쿠키의 특징

  • 클라이언트(브라우저)에 저장됨.
  • 서버가 생성 후 클라이언트에 전송하거나 클라이언트가 직접 생성할 수도 있음.
  • 사용자가 브라우저를 종료해도 일정 기간 동안 유지 가능.
  • 모든 HTTP 요청에 자동으로 포함되어 서버로 전송됨.
  • 보안이 취약 → 중요 정보 저장에 부적절.

쿠키의 동작 방식

  1. 클라이언트가 서버에 요청을 보냄.
  2. 서버가 응답을 보낼 때 Set-Cookie 헤더를 통해 쿠키를 생성.
  3. 브라우저가 쿠키를 저장함.
  4. 이후 동일한 도메인으로 요청을 보낼 때 자동으로 Cookie 헤더에 포함하여 서버로 전송됨.

예제 (쿠키 설정 및 사용)

서버 응답 (쿠키 설정)
HTTP/1.1 200 OK
Set-Cookie: user=alice; Expires=Wed, 01 Mar 2025 12:00:00 GMT; HttpOnly
클라이언트 요청 (쿠키 포함)
GET /dashboard HTTP/1.1
Host: example.com
Cookie: user=alice

쿠키의 속성

속성설명
Expires만료 날짜 설정 (지정하지 않으면 세션 쿠키)
Max-Age만료까지의 시간(초 단위)
Domain쿠키가 적용될 도메인 지정
Path쿠키가 적용될 경로 지정
SecureHTTPS에서만 전송됨
HttpOnlyJavaScript에서 접근 불가능 (XSS 공격 방지)
SameSite크로스 사이트 요청 제한 (Strict, Lax, None)

예제 (보안 쿠키 설정)

Set-Cookie: session_id=xyz123; HttpOnly; Secure; SameSite=Strict

세션 (Session)

세션서버에서 관리하는 사용자 상태 정보로, 쿠키보다 보안성이 높다.

세션의 특징

  • 서버에서 관리됨.
  • 사용자의 특정 요청을 식별하고 유지하는 역할.
  • 세션 ID(Session ID)를 발급하여 클라이언트와 연결.
  • 사용자가 브라우저를 닫거나 일정 시간이 지나면 만료됨.
  • 보안이 쿠키보다 강함 (하지만 여전히 주의 필요).

세션의 동작 방식

  1. 클라이언트가 로그인 요청을 보냄.
  2. 서버가 세션을 생성하고 세션 ID를 발급한 후, 쿠키에 저장하여 클라이언트에게 전달.
  3. 클라이언트는 이후 요청에서 세션 ID를 쿠키로 서버에 전송.
  4. 서버는 세션 ID를 확인하고, 해당 사용자의 정보를 유지.

예제 (세션 사용 흐름)

서버 응답 (세션 ID 생성 및 전송)
HTTP/1.1 200 OK
Set-Cookie: session_id=xyz123; HttpOnly; Secure
클라이언트 요청 (세션 ID 포함)
GET /dashboard HTTP/1.1
Host: example.com
Cookie: session_id=xyz123

세션 저장 방식

저장 방식설명
메모리(RAM)속도가 빠르지만 서버 재시작 시 세션 정보 유실
파일 시스템서버의 특정 디렉토리에 저장 (ex: PHP의 /tmp/sess_*)
데이터베이스(DB)MySQL, Redis 등에 저장하여 확장성 및 유지보수 용이
Redis / Memcached속도가 빠른 인메모리 데이터 저장소 활용

쿠키와 세션의 차이점

비교 항목쿠키세션
저장 위치클라이언트(브라우저)서버
보안낮음 (위변조 가능)높음 (서버 관리)
속도빠름상대적으로 느림
유지 기간사용자가 설정 가능서버 설정에 따라 만료됨
사용 목적간단한 데이터 저장 (예: 다크 모드, 자동 로그인)로그인 및 사용자 인증 관리

쿠키는 가벼운 데이터 저장, 세션은 보안이 필요한 정보 유지에 적합!


세션의 보안 문제 및 해결 방법

보안 위험

  1. 세션 하이재킹(Session Hijacking) → 세션 ID를 탈취하여 사용자로 가장.
  2. 세션 피싱(Session Fixation) → 공격자가 미리 설정한 세션 ID를 사용하게 유도.
  3. 쿠키 변조 및 탈취 → XSS(크로스 사이트 스크립팅) 공격으로 쿠키 유출 가능.

보안 강화 방법

  • HTTPS 사용Secure 속성을 설정하여 암호화된 통신 보장.
  • HttpOnly 설정HttpOnly 속성을 추가하여 JavaScript 접근 차단.
  • 세션 타임아웃 설정 → 일정 시간 후 세션 만료 처리.
  • 세션 재생성 → 로그인 후 session_regenerate_id()를 호출하여 새로운 세션 ID 할당.
  • IP 및 User-Agent 검증 → 동일한 네트워크 환경인지 확인.
profile
Turning Vision into Reality.

0개의 댓글