🖥 CS/Web
Cookie와 Session
0_ch4n
2022. 5. 30. 15:21
반응형
✔️ 쿠키와 세션을 사용하는 이유
- HTTP 프로토콜의 특성이자 약점을 보완하기 위해서 사용합니다.
- connectionless : 클라이언트가 요청을 한 후 응답을 받으면 그 연결을 끊어버리는 특징
- stateless : 연결을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보를 유지하지 않는 특징
- 쿠키와 세션을 이용하면 서버는 클라이언트가 누구인지 알 수 있게 됩니다.
✔️ 쿠키(Cookie)
- 클라이언트(브라우저)의 로컬에 저장되는 키와 값으로 구성된 String 형태의 작은 데이터입니다.
- 클라이언트의 상태 정보를 클라이언트의 PC에 저장하였다가 필요 시 참조하거나 재사용할 수 있습니다.
📌 사용 목적
- 세션 관리(Session Management) : 로그인, 사용자 닉네임, 접속 시간, 장바구니 등의 서버가 알아야 할 정보들을 저장합니다.
- 개인화(Personalization) : 사용자마다 다르게 그 사람에 적절한 페이지를 보여줄 수 있습니다.
- 트래킹(Tracking) : 사용자의 행동과 패턴을 분석하고 기록합니다.
📌 특징
- 이름, 값, 만료일(저장 기간 설정), 경로 정보로 구성되어 있습니다.
- 클라이언트에 총 300개의 쿠키를 저장할 수 있습니다.
- 하나의 도메인 당 20개의 쿠키를 가질 수 있습니다.
- 하나의 쿠키는 4KB(=4096byte)까지 저장 가능합니다.
📌 동작 순서
- 클라이언트가 페이지를 요청
- 서버는 쿠키를 생성하고 HTTP 헤더에 쿠키를 포함시켜 응답
- 넘겨 받은 쿠키는 클라이언트가 로컬 PC에 저장하고 다시 서버에 요청할 때 함께 전송
- 서버에서 쿠키를 읽고 변경할 필요가 있다면 변경된 쿠키를 HTTP 헤더에 포함시켜 응답
📌 사용 예시
- 자동로그인과 '아이디와 비밀번호를 저장하시겠습니까?'
- 쇼핑몰의 장바구니
- 팝업의 '오늘 더 이상 창을 보지 않음'
📌 쿠키의 취약성
- 탈취될 경우 쿠키에 저장된 사용자의 개인 정보를 침해 당할 수 있고 세션 정보를 통해 사용자의 정보를 조회/조작할 수 있습니다.
- 따라서, 쿠키에는 민감하거나 중요한 정보를 담는 것은 위험합니다.
✔️ 세션(Session)
- 쿠키를 기반으로 서버 내부에 저장되는 클라이언트와 서버 사이의 연결을 확인하기 위한 정보입니다.
- 서버는 클라이언트를 구분하기 위해 세션ID를 부여하며 접속 후 브라우저가 종료될 때까지 인증상태를 유지합니다.
📌 특징
- 각 클라이언트에게 고유 세션 ID를 부여하고 클라이언트의 요구에 맞는 서비스를 제공합니다.
- 브라우저가 종료되면 삭제되므로 보안면에서 쿠키보다 우수합니다.
- 서버에 저장하기 때문에 사용자가 많아질수록 서버 메모리를 많이 차지하게 됩니다.
📌 동작 순서
- 클라이언트가 페이지를 요청
- 서버는 Request-Header의 쿠키를 확인하여 SessionID를 보냈는지 확인
- SessionID가 존재하지 않는다면 서버가 생성해서 쿠키를 통해 클라이언트에게 응답
- 클라이언트는 서버에 요청할 때 쿠키의 SessionID를 같이 서버에 전달해서 요청
- 서버는 SessionID를 전달 받아서 Session에 있는 클라이언트 정보를 가져와서 사용
- 클라이언트 정보로 서버 요청을 처리하여 클라이언트에게 응답
📌 사용 예시
- 로그아웃 전까지 화면을 이동해도 풀리지 않는 로그인
✔️ 쿠키 VS 세션
- 쿠키와 세션을 적절한 요소 및 기능에 병행 사용하여 서버 자원의 낭비를 방지하고 웹사이트의 속도를 높여야합니다.
📄 참고
https://raonsecure.raonctf.com/essential/study/web/session_connection
반응형