쿠키와 세션 이해
웹 서핑을 하다 보면 '쿠키' 허용 여부를 묻는 사이트들을 종종 볼 수 있다. 쿠키를 허용하거나 허용하지 않거나 별 차이를 느끼지 못한 경험도 있을 것이다. 하지만 현대 인터넷 환경에서 쿠키는 대부분의 유저가 사용하고 있는 필수적인 요소이다. 그렇다면 쿠키는 무엇일까?
쿠키를 알아보기 위해 먼저 HTTP의 특성에 대해 이해해야한다.
HTTP의 특성
HTTP는 네트워크 장치 간에 서로 정보를 전달할 수 있도록 설계된 프로토콜이다. 각 유저들은 서버와 HTTP 통신 규약에 따라서 정보를 주고 받을 수 있다. 하지만 HTTP는 원활환 통신 환경을 유지하기 위해 다음과 같은 두 가지 특성을 가진다.
- Connectionless(비연결성)
- Stateless(무상태)
Connectionless(비연결성)
비연결성이란 클라이언트가 서버에 정보를 요청하고 서버가 응답하여 클라이언트에게 정보를 제공하면, 서버는 바로 클라이언트와 통신을 끊는 특성을 말한다. 이를 통해 서버 자원을 효율적으로 관리할 수 있고, 유저에게 원활한 환경에서 정보를 제공할 수 있다. 서버는 수 많은 클라이언트들에게 정보를 제공하고 있기 때문에 클라이언트의 통신을 끊어 트래픽이 몰리는 현상을 방지할 수 있다.
Stateless(무상태)
무상태란 말 그대로 서버가 상태를 유지하고 있지 않는 특성을 말한다. 이는 Connectionless(비연결성)과 연관이 있다. 서버는 클라이언트에게 정보를 제공하고 통신을 끊는 특성을 가지고 있기 때문에 다시 접속한 클라이언트가 이전 클라이언트와 동일한 인물인지 알 수가 없다. 실제로 HTTP에는 메모리가 없기 때문에 HTTP 자체만으로는 클라이언트 정보를 저장할 수가 없다. 무상태 특성을 통해 HTTP는 서버의 유지 비용과 리소스를 절약할 수 있지만, 클라이언트를 기억하지 못한다는 단점이 있다.
비연결성과 무상태라는 특성을 가지고 있는 통신에서 클라이언트의 정보를 기억할 수 있게 해주는 것이 바로 쿠키와 세션이다. 로그인을 유지하거나 장바구니에 담은 항목들을 기억할 수 있게 해주는 것 모두 쿠키, 세션과 관련이 있다.
그렇다면 먼저 쿠키란 무엇인가?
쿠키
쿠키란 서버가 클라이언트에게 전달하는 4KB 이하의 작은 데이터 파일을 말한다. 클라이언트가 서버에 요청을 보내면 서버는 클라이언트를 기억하기 위해 쿠키와 함께 응답을 한다. 만약에 클라이언트가 다시 서버에 접속을 하려고 인증 정보를 보내면 서버는 쿠키를 통해 클라이언트를 식별할 수 있다.
쿠키는 보통 도메인 단위로 전송이 가능하다. 예를 들면, 네이버에서 받은 쿠키는 다음에서는 작동하지 않는다는 뜻이다. 그리고 브라우저는 쿠키를 보관하는 공간을 따로 두고 있으며 최대 200개까지 저장할 수 있다.
그러나 이런 쿠키도 변조가 가능하다는 단점이 있다. 현재는 쿠키에 인증 정보를 담는 행위를 권장하지 않지만, 2000년대 초반에는 쿠키로 인증을 하는 사이트들이 매우 많았다. 브라우저가 인증 정보가 담긴 쿠키를 들고 인증을 하는 것은 보안에 매우 취약했다. 쿠키 변조를 통해 사이트에서 인가를 받아 정보를 변경하거나 인증 정보를 알아내는 등 문제가 많았다. 이런 부분을 보완하기 위해 인증 정보를 서버가 저장하는 방식인 세션이 등장했다.
세션
세션이란 일정 기간 동안 서버에 데이터를 저장하는 상태를 말한다. 쿠키와 같이 인증 정보를 브라우저가 들고 있는 것이 아니라 서버가 저장을 하고 있기 때문에 보안이 더 강화된 방식이다. 세션은 크게 세션 ID와 세션 정보로 이루어져 있다.
세션은 다음과 같이 동작한다.
- 클라이언트가 웹 서버로 데이터를 요청
- 서버는 cookie 라는 요청 헤더를 보고 세션 ID를 받았는지 여부를 확인
- 세션 ID를 받았을 경우 이를 통해 인증을 진행하며, 그렇지 않은 경우 set-cookie라는 요청 헤더에 세션 ID를 발행하여 전달
- 브라우저는 쿠키 형식으로 세션 ID를 저장하였다가 다음 요청때, 세션 ID를 쿠키에 담아 서버에 요청
- 서버는 세션 ID를 확인하고 인증을 진행
세션 ID는 새로 로그인을 할 때마다 기존 세션은 파기가 된다. 그리고 쿠키에 담아서 전달을 하기 때문에, 쿠키와 마찬가지로 도메인마다 별개로 작동한다.
Reference:
https://www.kaspersky.co.kr/resource-center/definitions/cookies
인터넷 쿠키는 무엇이고, 어떤 역할을 하나요? | Kaspersky
인터넷 쿠키에 대해서는 익숙하지만, 인터넷 쿠키가 무엇이고, 무엇을 하고, 사이버 위협을 제기하는지 알기는 어렵습니다. 가이드를 읽고 자세히 알아보십시오.
www.kaspersky.co.kr
https://www.cloudflare.com/ko-kr/learning/privacy/what-are-cookies/
https://www.cloudflare.com/ko-kr/learning/ddos/glossary/hypertext-transfer-protocol-http/
https://raonctf.com/essential/study/web/cookie_connection
RAON CTF - WEB Essential
HTTP Cookie 연결을 위한 정보
raonctf.com