쿠키
HTTP 쿠키?
- HTTP는
Connectionless
및 Stateless
이므로 서버의 자원 낭비를 줄일수 있다는 장점이 있지만, 상태 정보를 기억하지 못하는 단점을 보완하고자 쿠키 및 세션이라는 기술을 활용한다.
key
, value
형태로 구성된 문자열 형태로 이루어진 데이터이며, 주로 다음과 같은 목적을 위해 사용한다.
- 세션 관리: 서버에 저장해야 할 로그인, 장바구니, 게임 스코어등의 정보 관리
- 개인화: 사용자 선호, 테마 등의 세팅
- 트래킹: 사용자 행동을 기록하고 분석하는 용도
- 도메인당 20개의 사용 제한이 있으며, 쿠키 하나의 용량 제한은 약 4KB이다.
쿠키 생성
- HTTP 요청을 수신할 때, 서버는 응답과 함께 헤더의 Set-Cookie에 필요한 정보를 담아 전송한다.
- 쿠키는 일반적으로 브라우저에 저장되고, 한번 쿠키가 생성이 된 브라우저가 같은 요청을 보낼 경우 헤더에 새성된 쿠키를 담아 요청이 이루어진다. 그리고 서버는 요청에서의 헤더에 담긴 쿠키의 정보를 바탕으로 기존 사용자를 식별하거나 상태 정보를 확인할 수 있다.
- 쿠키는 만료일과 도메인 혹은 경로 제한을 설정할 수 있다.(선택적으로 쿠키를 전송할 수 있다.)
Secure과 HttpOnly 쿠키
Secure
: Secure 쿠키는 HTTPS상에서 암호화된 요청일 경우에만 전송된다.(아무리 secure 키워드를 통해 생성한 쿠키일지라도 민감한 정보는 저장되어서는 안된다.)
HttpOnly
: HttpOnly 쿠키는 XSS같은 스크립팅 공격을 방지하기 위해 브라우저에서 Document.cookie
를 통한 쿠키 접근을 막는데 사용된다.
XSS(Cross Site Scription): 공격자가 공격하려는 사이트에 스크립트를 넣어, 상대방이 의도치 않은 동작을 수행하도록 하는 기법이다. (쿠키 및 세션 ID 탈취, 시스템 관리자 권한 획득, 악성코드 다운로드, 거짓 페이지 노출 등의 공격이 존재한다.)
세션
세션?
- 클라이언트의 상태 정보를 서버에서 관리하기 위해 서버 메모리에 저장하는 기술이다.
Object
형태로 저장된다.
- 사용자 정보 등 민감한 정보를 관리할 때 주로 사용된다.
- 브라우저당 하나의 세션이 생성되며, 기본적으로 브라우저 종료시 삭제된다.
쿠키와 세션의 동작 메커니즘
- 서버에서는 클라이언트(브라우저)의 구분을 위해 생성한 세션마다 각각의 세선 ID를 부여하며, 세선 ID는 쿠키에 담겨 클라이언트에게 전송된다.
- 클라이언트는 서버로부터 응답과 함께 쿠키를 받고 이를 브라우저에 저장한다.
- 클라이언트가 동일한 서버에 요청을 보낼 시 헤더에 쿠키가 담겨 요청이 이루어지며, 서버는 쿠키를 받아 세션 ID를 확인하고 주어진 세션 ID에 해당하는 세션의 클라이언트 정보를 찾아 처리 후 응답을 하게 된다.
쿠키, 세션 특징 비교
|
쿠키 |
세션 |
저장 위치 |
브라우저 |
서버 |
저장 형식 |
text |
Object |
리소스 |
클라이언트 리소스 |
서버의 리소스 |
용량 제한 |
도메인당 20개,1개당 4KB |
제한 없음 |
만료 시점 |
쿠키 저장시 설정 |
알수 없음(기본적으로 브라우저 종료시 삭제) |
Reference