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 누르면 설정된 쿠키 정보 확인/수정 가능