쿠키 & 세션

유지나·2024년 4월 3일

쿠키, 세션의 정의


🟩 쿠키 : 브라우저에 저장되는 데이터 파일
🟩 세션 : 서버에 저장되는 데이터 파일

HTTP의 특징


  1. 클라이언트-서버 구조로 이루어져있음. 즉, 클라이언트가 서버에 요청을 보내면, 서버가 요청에 대한 응답을 보냄.
  2. 무상태 프로토콜(Stateless), 서버가 클라이언트의 상태를 보존하지 않는다.
  3. 비연결성(Connectionless), 요청을 주고받을 때만 연결을 유지하고 응답을 주고나면 TCP/IP 연결을 끊는다.
    -> 최소한의 자원으로 서버를 유지할 수 있다.

쿠키과 세션의 필요성


HTTP 통신과정에서 서버가 사용자의 정보를 기억하고 있지 않기 때문에, 쿠키와 세션을 사용해 사용자의 정보를 저장하는 역할을 한다.

쿠키


  • 브라우저에 저장되는 파일
  • 서버에서 받은 정보를 사용자쪽에서 보솬
  • key- value쌍으로 구성되어있는 파일
  • 도메인 당 20개의 쿠키가 저장 가능하고, 하나의 쿠키는 4KB까지 저장 가능
  • 클라이언트 측에 저장되기 때문에 세션보다 빠르다는 장점이 있다.

쿠키의 특성

  1. 세션관리
    로그인, 사용자 닉네임, 접속시간, 장바구니 등과 같은 정보를 저장함

  2. 개인화
    사용자마다 개인화된(다른) 페이지를 제공

  3. 트래킹
    사용자의 행동과 패턴을 분석하고 기록함

쿠키의 동작 방식

  1. 클라이언트가 웹 서버에 페이지를 요청한다.
  2. 웹 서버에서 쿠키를 생성한다.
  3. HTTP헤더에 쿠키를 포함하여 응답한다.
  4. 받은 쿠키를 이용하여 클라이언트는 쿠키 정보를 넣어 서버에 요청한다.
  5. 서버에서 쿠키를 읽고 변경 할 필요가 있다면 변경된 쿠키를 헤더에 넣어서 전송한다.

세션


  • 서버측에서 관리하는 정보
  • 사용자가 로그아웃하거나 세션이 만료되면 세션 정보를 서버에서 삭제
  • 각 클라이언트에 고유 sessionID를 부여함
  • sessionID를 통해 사용자를 구분하고, 각 요구에 맞는 서비스를 제공
  • 서버 측에 저장되기 때문에 쿠키보다 느리다는 단점이 있음

** 서버측에 많은 데이터를 저장하게 되면, 서버가 메모리를 감당할 수 없게된다.

세션의 특징

  1. 중요한 정보 관리
    누군가에게 노출되면 안되는 정보를 서버 안에서 다루기 위해 사용

세션의 동작 방식

  1. 클라이언트가 서버에 접속하면 서버는 sessionID를 발급한다.
  2. 받은 sessionID는 쿠키를 이용해 클라이언트측에 저장한다.
  3. 서버에 요청할 때, 해당 sessionID를 넣어 요청한다.
  4. 서버는 sessionID를 이용해 사용자의 정보를 가져와서 클라이언트에게 응답한다.

그렇다면, 세션의 장점은..?

  • sessionID는 쿠키에 저장되고, HttpOnly 및 secure옵션으로 보안을 강화할 수 있다.
  • 세션은 서버측에서 관리되기 때문에, 서버측에서 언제든 세션을 무효화시킬 수 있어 보안에 유리하다.
  • 세션은 서버측에서 사용자의 데이터를 쉽게 관리할 수 있다.

쿠키 보안 이슈

  • XSS(cross-site scripting) : 공격자가 스크립트를 통해 쿠키를 직접적으로 읽을 수 있다.
  • 중간자 공격 : 암호화 되어있지 않은 쿠키 정보는 도용이 쉬워진다.

쿠키 보안 이슈 해결 방법
플래그
1) HttpOnly 플래그

  • 쿠키를 http(s) 요청을 통해서만 접근할 수 있도록 제한하는 기능
  • 브라우저가 해당 플래그를 인식하게 되면, 해당 쿠키를 스크립트에서 접근할 수 없는 영역으로 분류한다.
  • XSS 공격을 막기 위해 사용할 수 있다.

2) Secure 플래그

  • 쿠키를 오직 https 플로토콜을 통해서만 전달되도록 하는 기능
  • 쿠키가 http에서는 암호화되지 않고 평문 형태로 전달되는데, 이를 방지하고자 https를 통해서 암호화하며 전달되도록 한다.

세션의 단점

  • 많은 정보를 저장하게 되면 서버의 메모리가 부족해지면서 서버 리소스를 사용할 수 없게 된다.

-> 그래서 JWT 토큰 인증 방식을 많이 사용한다.

참고


https://velog.io/@yiseungyun/%EC%BF%A0%ED%82%A4%EC%99%80-%EC%84%B8%EC%85%98

profile
지르나르

0개의 댓글