W2 쿠키와 세션

hyuun01·2022년 9월 21일
0

WebHacking

목록 보기
3/12

1. 쿠키

: HTTP에서 상태를 유지하기 위해 사용하는 Key-Value 형태의 값

  • 서버 ---(클라이언트에게 쿠키 발급)---> 클라이언트
  • 서버 <---(서버에 요청 시 쿠키 함께 전송)--- 클라이언트

서버는 쿠키(클라이언트의 요청에 포함됨) 통해 클라이언트 구분


쿠키의 등장 배경

HTTP 프로토콜은 Connectionless, Stateless
-> 웹 서버는 클라이언트 기억할 수X
-> HTTP에서 상태 유지 위해 쿠키 탄생

  • Connectionless : 하나의 요청에 하나의 응답을 한 후 연결을 종료
    -> 새 요청이 있을 때마다 항상 새로운 연결 / 이후의 요청과 이어질 수 X
  • Stateless : 통신이 끝난 후 상태 정보를 저장X
    -> 이전 연결에서 사용한 데이터는 다른 연결에서 요구할 수X

쿠키 용도

1) 정보 기록

  • ex) "다시 보지 않기" 등 팝업 옵션 정보를 쿠키에 저장
    -> 쿠키를 통해 팝업 창 표시 여부 판단
  • 과거 : 클라이언트의 정보 저장에 쿠키 사용
    -> 리소스 낭비(쿠키는 서버와 통신할 때마다 전송)
    -> 최근 : Modern Storage APIs 통해 데이터 저장 권장

2) 상태정보 표현

  • 클라이언트 식별할 수 있는 값을 쿠키에 저장해 이용
    클라이언트의 로그인 상태, 이용자 구별 위해

쿠키 유무에 따른 통신

1) 쿠키가 없는 통신

  • 서버는 요청을 보낸 클라이언트가 누구인지 알 수X

2) 쿠키가 있는 통신

  • 클라이언트가 서버에 보내는 요청에는 모두 쿠키 포함됨
  • 서버는 쿠키 통해 클라이언트 식별



2. 세션

: 쿠키에 포함된 Session ID를 사용해 서버에 저장된 세션 데이터에 접근하는 방식

  • 인증 정보를 서버에 저장
    + 해당 데이터에 접근할 수 있는 키(Session ID)를 만들어 클라이언트에 전달

  • 브라우저 : 해당 키를 쿠키에 저장
    + 이후 HTTP에 요청 보낼 때 사용

  • 서버 : 요청에 포함된 키에 해당하는 데이터 가져와 인증 상태 확인

  • Session ID
    : 인증 정보 데이터에 접근할 수 있는 키
    : 유추할 수 없는 랜덤한 문자열 형태


세션의 등장 배경 : 쿠키 변조

  • 쿠키는 클라이언트의 브라우저에 저장됨
  • 쿠키는 클라이언트의 요청에 포함됨
  • 악의적인 클라이언트가 쿠키 정보 변조해 서버에 요청 보낼 수 있음

세션 하이재킹(Session Hijacking)

: 타 이용자의 쿠키를 훔쳐 인증 정보를 획득하는 공격

  • 쿠키에는 세션 정보가 저장됨
    -> 서버는 이를 통해 이용자 식별, 인증 처리
  • 공격자가 이용자의 쿠키를 훔칠 수 있어
    -> 세션에 해당하는 이용자의 인증 상태를 훔치는 것

세션



3. 세션 v.s. 쿠키

  • 쿠키 : 데이터 자체를 이용자가 저장
  • 세션 : 데이터 자체를 서버가 저장



4. 쿠키 적용법

  • 쿠키는 클라이언트에 저장됨
    -> 클라이언트는 저장된 쿠키를 조회, 수정, 추가O
  • 클라이언트가 서버에 요청 보낼 때 저장된 쿠키를 요청 헤더에 넣어 전송
    -> 이용자가 요청 보낼 때 쿠키 헤더 변조 가능

쿠키의 만료

  • 쿠키 설정 시 만료 시간 지정 가능
    -> 만료 시간 이후에는 클라이언트에서 쿠키가 삭제됨
  • 쿠키의 만료는 클라이언트(브라우저)에서 관리됨

쿠키의 설정

1) 서버에서의 쿠키 설정

  • HTTP 응답 중 헤더에 쿠키 설정 헤더(Set-Cookie) 추가
    -> 클라이언트의 브라우저가 쿠키 설정함

    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;"


클라이언트에서 쿠키 다루는 방법

1) 크롬 Console 활용하는 방법

  • Console 탭에서 document.cookie 입력
    -> 쿠키 정보 확인 가능
  • 쿠키 옵션(HttpOnly)에 따라 자바스크립트에서 쿠키 확인 불가능할 수도

2) 크롬 Application 활용하는 방법

  • Application 탭에서 좌측 목록 중 Cookies 펼치면
    -> Origin 목록 확인 가능
    -> Origin 누르면 설정된 쿠키 정보 확인/수정 가능

0개의 댓글