[일반] Cookie, Session

Shadis·2024년 10월 23일

일반

목록 보기
11/14

쿠키와 세션

네이버나 구글 같이 로그인 기능이 있는 웹 사이트를 이용할 때 한번 로그인을 하면 해당 웹 서비스 안에서 이런저런 웹 서비스를 이용해도 로그인이 풀리지 않을 뿐더러 오랜만에 해당 웹 서비스에 접속해도 로그인이 풀려있지 않는 경우가 있다. 이런 로그인, 자동 로그인, 사용자 맞춤 컨텐츠 노출 기능은 쿠키와 세션을 통해 이루어진다.

쿠키와 세션은 웹 서비스를 이루는 중요한 개념 중 하나이지만 쿠키와 세션에 대해 공부하기 이전에는 웹 사이트를 사용하며 자주 접해서 친숙하지만 정확히 어떤 역할을 하는지 알지 못했다. 쿠키와 세션을 이해해야 웹 서비스의 구조를 더 잘 이해할 수 있고 쿠키와 세션을 이용한 보안 취약점을 알 수 있다.

쿠키와 세션을 사용하는 이유

https://velog.io/@ymail837/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-HTTP#http-%ED%8A%B9%EC%A7%95
(HTTP의 특징)

쿠키와 세션을 사용하는 이유는 Stateless, Connectionless 한 HTTP의 특징 때문이다. 웹 서비스 호스트의 입장에서는 로그인 기능을 통해 웹 서비스에 방문하는 클라이언트에 맞춰 개인화된 서비스를 제공하여 웹 서비스에 대한 만족도를 올리고 싶어한다. 하지만 웹 서비스가 사용하는 HTTP는 클라이언트의 정보를 저장하지 않는 Stateless, Connectionless한 특징을 가지고 있기 때문에 클라이언트가 처음 로그인을 수행하고 이후 다른 페이지로 이동하면 이론상 로그인이 풀려야 한다.

이런 HTTP의 한계를 극복하기 위해 쿠키와 세션을 사용한다. 웹 서버는 쿠키와 세션을 이용해서 웹 서비스를 방문하는 클라이언트를 특정하고 그 클라이언트에 맞는 서비스를 제공한다.

쿠키

쿠키는 웹 서버가 클라이언트의 브라우저에 저장하는 key:value 쌍 형태의 데이터이다.

웹 서버가 클라이언트의 브라우저에 저장하는 데이터이므로 클라이언트가 브라우저의 개발자 도구를 이용해서 쿠키를 확인할 수 있고 또한 마음대로 수정할 수도 있다.

쿠키는 보통 로그인 같은 사용자 인증을 위해 사용하는 경우가 많은데 쿠키만을 이용하면 보안에 취약해진다. USER:(USER ID) 라는 쿠키를 통해 웹 서버가 클라이언트를 구분한다고 하자. A가 아닌 B가 USER:A로 쿠키 값을 고치고 웹 서버에 접속하면 웹 서버는 B가 A인줄 알고 A 계정으로 로그인한 웹 서비스를 제공할 것이다. 이런 보안 취약점이 존재하는 이유는 쿠키가 브라우저에 저장되어 있고 클라이언트가 마음대로 브라우저의 쿠키를 조회, 수정할 수 있다는 특징 때문이다.

세션

위에서 설명한 쿠키의 한계 때문에 쿠키와 함께 세션을 사용한다.

세션은 쿠키와 달리 웹 서버에 저장하는 key:value 쌍 형태의 데이터이다.

그렇다면 세션을 사용하면 어떻게 쿠키만을 사용했을 때 발생할 수 있는 보안 취약점을 극복할 수 있을까? 클라이언트가 로그인을 수행하면 웹 서버는 무작위 값을 생성하여 클라이언트의 브라우저에 USER:(무작위 값) 쿠키를 저장하고 웹 서버 자신의 세션에는 (계정 ID):(무작위 값) 세션을 저장한다. 그리고 웹 서버는 어떤 클라이언트가 접속해오면 해당 클라이언트의 USER:(무작위 값) 쿠키를 확인하고 자신의 세션에서 그 무작위 값에 해당하는 계정 ID를 확인하면 클라이언트가 어떤 계정으로 로그인하여 웹 서비스를 이용하려고 하는 것인지 알 수 있다. 이때 그 계정의 주인을 제외한 다른 사용자들은 웹 서버가 제공한 (무작위 값)을 모르기 때문에 쿠키를 변조하여 로그인할 수 없다.

물론 만약 (무작위 값)이 노출되면 쿠키를 이용한 보안 취약점을 막을 수 없다. 이런 피해를 최소화하기 위해 웹 서버는 세션에 유효기간을 설정해 둔다. 유효기간이 지나면 세션을 폐기하는 것이다. 이렇게 세션에 유효기간을 설정해 두면 사용자의 쿠키가 노출되었더라도 유효기간이 지나면 노출된 쿠키를 사용할 수 없어진다. "세션이 만료되었습니다"라는 메시지가 나타나면서 로그인이 풀리는 것이 이런 세션의 특징 때문이다.

profile
HGU 20 김민석

0개의 댓글