쿠키, 세션의 정의
🟩 쿠키 : 브라우저에 저장되는 데이터 파일
🟩 세션 : 서버에 저장되는 데이터 파일
HTTP의 특징
- 클라이언트-서버 구조로 이루어져있음. 즉, 클라이언트가 서버에 요청을 보내면, 서버가 요청에 대한 응답을 보냄.
- 무상태 프로토콜(Stateless), 서버가 클라이언트의 상태를 보존하지 않는다.
- 비연결성(Connectionless), 요청을 주고받을 때만 연결을 유지하고 응답을 주고나면 TCP/IP 연결을 끊는다.
-> 최소한의 자원으로 서버를 유지할 수 있다.
쿠키과 세션의 필요성
HTTP 통신과정에서 서버가 사용자의 정보를 기억하고 있지 않기 때문에, 쿠키와 세션을 사용해 사용자의 정보를 저장하는 역할을 한다.
쿠키
- 브라우저에 저장되는 파일
- 서버에서 받은 정보를 사용자쪽에서 보솬
- key- value쌍으로 구성되어있는 파일
- 도메인 당 20개의 쿠키가 저장 가능하고, 하나의 쿠키는 4KB까지 저장 가능
- 클라이언트 측에 저장되기 때문에 세션보다 빠르다는 장점이 있다.
쿠키의 특성
-
세션관리
로그인, 사용자 닉네임, 접속시간, 장바구니 등과 같은 정보를 저장함
-
개인화
사용자마다 개인화된(다른) 페이지를 제공
-
트래킹
사용자의 행동과 패턴을 분석하고 기록함
쿠키의 동작 방식
- 클라이언트가 웹 서버에 페이지를 요청한다.
- 웹 서버에서 쿠키를 생성한다.
- HTTP헤더에 쿠키를 포함하여 응답한다.
- 받은 쿠키를 이용하여 클라이언트는 쿠키 정보를 넣어 서버에 요청한다.
- 서버에서 쿠키를 읽고 변경 할 필요가 있다면 변경된 쿠키를 헤더에 넣어서 전송한다.
세션
- 서버측에서 관리하는 정보
- 사용자가 로그아웃하거나 세션이 만료되면 세션 정보를 서버에서 삭제
- 각 클라이언트에 고유 sessionID를 부여함
- sessionID를 통해 사용자를 구분하고, 각 요구에 맞는 서비스를 제공
- 서버 측에 저장되기 때문에 쿠키보다 느리다는 단점이 있음
** 서버측에 많은 데이터를 저장하게 되면, 서버가 메모리를 감당할 수 없게된다.
세션의 특징
- 중요한 정보 관리
누군가에게 노출되면 안되는 정보를 서버 안에서 다루기 위해 사용
세션의 동작 방식
- 클라이언트가 서버에 접속하면 서버는 sessionID를 발급한다.
- 받은 sessionID는 쿠키를 이용해 클라이언트측에 저장한다.
- 서버에 요청할 때, 해당 sessionID를 넣어 요청한다.
- 서버는 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