imredzZ

[Dreamhack] Background : Cookie & Session 본문

[Web]/개념 정리

[Dreamhack] Background : Cookie & Session

hhaye_ 2024. 7. 3. 02:00

1. 쿠키 

  • 클라이이언트의 IP 주소와 User-Agent는 매번 변경될 수 있는 고유하지 않은 정보일 뿐만 아니라, HTTP 프로토콜의 Connectionless와 Stateless 특징때문에 웹 서버는 클라이언트를 기억할 수 없게 됨
    ▶ Connectionless, Stateless 특성을 갖는 HTTP에서 상태를 유지하기 위해 Cookie가 탄생하게 됨

(1) 쿠키의 개념

  • Key와 Value로 이뤄진 일종의 단위 
  • 서버가 클라이언트에게 쿠키를 발급하게 되면, 클라이언트는 서버에 요청을 보낼 때마다 쿠키를 같이 전송하게 됨
  • 서버는 클라이언트의 요청에 포함된 쿠키를 확인해서 클라이언트를 구분할 수 있게 됨

(2) HTTP 프로토콜의 특징

  • Connectionless : 하나의 요청에 하나의 응답을 한 후에 연결을 종료하는 것을 의미함. 특정한 요청에 대한 연결은 이후의 요청과 이어지지 않고 새 요어이 있을 때마다 항상 새로운 연결을 맺음
  • Stateless : 통신이 끝난 후 상태 정보를 저장하지 않는 것을 의미. 이전의 연결에서 사용한 데이터를 다른 연결에서 요구할 수 없음

(3) 용도

  • 클라이언트의 정보 기록과 상태 정보를 표현하는 용도로 사용됨

(4) 정보 기록

  • 웹 서버 : 클라이언트의 팝업 옵셥을 기억하기 위해 쿠키에 해당 정보를 기록하고, 쿠키를 통해서 팝업 창 표시 여부를 판단함
  • 과거에는 클라이언트의 정보를 저장하기 위해 쿠키가 종종 사용되었었음. 쿠키는 서버와 통신할 때마다 전송되기 때문에 쿠키가 필요 없는 요청을 보낼 때 리소스 낭비가 발생할 수 있음
  • 최근에는 이러한 단점을 보완하기 위해 Modern Storage APIs를 통해 데이터를 저장하는 방식을 권장함

 

(5) 쿠키 변조

  • 쿠키는 클라이언트의 브라우저에 사용되고 요청에 포함되는 정보임
  • 악의적인 클라이언트는 쿠키 정보를 변조해서 서버에 요청을 보낼 수 있음. 만약에 서버가 별다른 검증 없이 쿠키를 통해서 이용자의 인증 정보를 식별한다면 공격자가 타 이용자를 사칭해서 정보를 탈취할 수 있음

 

2. 세션

  • 클라이이언트의 IP 주소와 User-Agent는 매번 변경될 수 있는 고유하지 않은 정보일 뿐만 아니라, HTTP 프로토콜의 Connectionless와 Stateless 특징때문에 웹 서버는 클라이언트를 기억할 수 없게 됨
  • 쿠키에 인증 상태를 저장하지만 클라이언트가 인증 정보를 변조할 수 없게 하기 위해서 세션을 사용하게 됨
  • 세션은 인증 정보를 서버에 저장하고 해당 데이터에 접근할 수 있는 키(유추할 수 없는 랜덤한 문자열)을 만들어서 클라이언트에 전달하는 방식으로 작동함
  • 브라우저 : 해당 세션 키를 쿠키에 저장 → HTTP 요청을 보낼 때 사용 
  • 서버 : 요청에 포함된 키에 해당하는 데이터를 가져와서 인증 상태를 확인하게 됨

쿠키는 데이터 자체를 이용자가 저장하고, 세션은 서버가 저장한다는 핵심적인 차이가 있음

 

3. 쿠키 적용법

  • 쿠키는 클라이언트에게 저장되기 때문에 클라이언트는 저장된 쿠키를 조회하거나 수정, 추가할 수 있게 됨
  • 클라이언트가 서버에 요청을 보낼 때 저장된 쿠키를 요청 헤더에 넣어서 전송하기 때문에 이용자가 요청을 보낼 때 쿠키 헤더를 변조할 수 있게 됨
  • 쿠키를 설정할 때에는 만료 시간을 지정할 수 있고, 만료 시간 이후에는 클라이언트에서 쿠키가 삭제되게 됨
  • 쿠키의 만료는 클라이언트(브라우저)에서 관리됨

(1)  서버

HTTP/1.1 200 OK
Server: Apache/2.4.29 (Ubuntu)
Set-Cookie: name=test;
Set-Cookie: age=30; Expires=Fri, 30 Sep 2022 14:54:50 GMT;
...

 

(2) 클라이언트

더보기

document.cookie = "name=test;"
document.cookie = "age=30; Expires=Fri, 30 Sep 2022 14:54:50 GMT;"

 

'[Web] > 개념 정리' 카테고리의 다른 글

[Dreamhack] Background: HTTP/HTTPS  (0) 2024.07.03
Background : Web  (0) 2024.07.02