Web

HTTP 세션 이해하기

Yepchani 2024. 2. 20. 08:23

들어가며

지난 포스팅에서는 웹에서 클라이언트의 상태를 관리하는 방법 중 하나인 HTTP 쿠키에 대해 알아보았습니다.

 

 

HTTP 쿠키 이해하기

들어가며 '쿠키(Cookie)'라는 단어를 들으면 뭐가 떠오르시나요? 바삭바삭한 과자? 아쉽게도 오늘 알아볼 쿠키는 과자가 아니라 웹사이트에서 사용되는 쿠키입니다. 대체 이 쿠키가 무엇이고 왜

yepchani.tistory.com

 

이번 포스팅에서는 쿠키와 밀접하게 관련된 또 다른 기술인 '세션'에 대해 알아보겠습니다.

 

세션이란

세션은 서버가 사용자(클라이언트)를 식별하고 상태 정보를 저장하는 기술입니다. HTTP는 stateless(상태 정보를 유지하지 않는) 프로토콜이므로, 사용자의 상태 정보를 유지하기 위한 별도의 메커니즘이 필요한데요. 이 때 사용될 수 있는 방법 중 하나가 바로 세션입니다.

 

사용자가 웹 사이트에 로그인하면 서버는 세션을 생성하고, 그 세션에 사용자의 로그인 정보와 같은 상태 정보를 저장합니다. 이후 사용자가 다른 페이지를 방문하거나 새로운 요청을 보낼 때마다 서버는 세션을 참조하여 사용자의 상태를 유지합니다.

 

동작 원리

동작 원리에 대해서 조금 더 자세하게 알아볼까요?

 

세션은 다음과 같이 세 단계로 걸쳐 동작합니다.

  1. 세션 생성
    사용자가 웹사이트에 처음 접속하면, 서버는 고유한 세션 ID를 생성합니다. 이 세션 ID는 서버에 저장되고, 클라이언트에게도 전달됩니다. 클라이언트는 이 세션 ID를 쿠키 등을 통해 저장할 수 있습니다.
  2. 세션 유지
    사용자가 웹사이트 내에서 이동하거나, 다시 접속할 때마다 클라이언트는 서버에게 이 세션 ID를 전달합니다. 서버는 이 세션 ID를 통해 해당 사용자의 세션 정보를 찾아냅니다. 이렇게 함으로써, 서버는 사용자의 로그인 상태, 장바구니 정보 등의 상태 정보를 유지할 수 있습니다.
  3. 세션 종료
    사용자가 로그아웃하거나, 일정 시간동안 활동이 없는 경우, 서버는 해당 세션을 종료합니다. 세션을 종료하면, 그에 해당하는 세션 ID는 더 이상 유효하지 않게 됩니다.

 

사용 예시

세션을 사용하는 대표적인 예시는 바로 '로그인 상태 유지'인데요. 사용자가 로그인하면 서버는 사용자의 ID와 같은 정보를 세션에 저장합니다. 그리고 사용자가 다른 페이지를 방문하거나 새로운 요청을 보낼 때마다 서버는 세션을 참조하여 사용자가 로그인한 상태임을 확인합니다.

 

특히, 로그인 상태를 유지할 때는 쿠키와 세션을 같이 사용하곤 하는데요.

사용자의 민감한 로그인 정보는 서버에 있는 세션에 저장하고, 해당 세션을 식별할 수 있는 세션 ID를 쿠키에 저장하는 방식이 일반적입니다. 이렇게 하면 사용자가 브라우저를 닫지 않는 한 로그인 상태를 유지할 수 있습니다.

 

또한, 사용자가 여러 탭이나 창을 사용하여 같은 웹사이트에 접속할 때도 로그인 상태를 유지하기 위해 세션과 쿠키를 함께 사용합니다. 새로운 탭이나 창을 열 때마다 새로운 세션을 생성하는 대신, 쿠키에 저장된 세션 ID를 통해 기존 세션에 접근하여 로그인 상태를 유지하게 됩니다.

 

단, 이 방식은 사용자가 같은 브라우저를 사용하고, 쿠키를 지우지 않는 한 유효합니다. 사용자가 다른 브라우저를 사용하거나 쿠키를 지우면 새로운 세션이 생성되고, 다시 로그인해야 합니다.

 

관리 방법

세션 관리는 주로 서버의 역할입니다. 서버는 세션을 생성, 저장, 삭제하는 기능을 제공해야 하며, 세션 ID를 안전하게 관리해야 합니다. 세션 ID는 보통 쿠키를 통해 클라이언트에게 전달되며, 이를 통해 서버는 클라이언트의 요청이 어떤 세션에 연결되어 있는지 알 수 있습니다.

 

장단점

세션의 가장 큰 장점은 보안성입니다. 세션 데이터는 서버에 저장되므로, 쿠키와 달리 사용자의 브라우저에 직접 노출되지 않습니다.

 

하지만, 세션은 서버의 메모리를 사용하기 때문에 많은 사용자가 동시에 접속하면 서버에 부담을 줄 수 있습니다.

 

보안 이슈

세션 데이터는 서버에 저장되기 때문에 비교적 안전하긴 하지만 여전히 보안 이슈를 가지고 있습니다.

  1. 세션 하이재킹(Session Hijacking)
    세션 하이재킹은 공격자가 사용자의 세션을 가로채는 행위를 말합니다. 이를 방지하기 위한 방법은 다음과 같습니다.
    • HTTPS 사용
      세션 ID를 암호화된 채널을 통해 전송함으로써 네트워크 상에서 세션 ID가 노출되는 것을 막을 수 있습니다.
    • HttpOnly 쿠키 사용
      이 옵션을 사용하면 클라이언트 측 스크립트에서 쿠키에 접근하는 것을 방지할 수 있습니다. 이렇게 하면 XSS 공격을 통해 쿠키가 탈취되는 것을 막을 수 있습니다.
    • 세션 타임아웃
      사용자가 일정 시간 동안 활동하지 않으면 세션을 자동으로 만료시킵니다. 이렇게 하면, 공격자가 세션 ID를 탈취하더라도 이용할 수 있는 시간을 제한할 수 있습니다.
    • 세션 재발급
      로그인 후 또는 중요한 트랜잭션을 수행한 후에는 새로운 세션 ID를 발급하는 것이 좋습니다. 이렇게 하면, 공격자가 이전의 세션 ID를 알아내더라도 새로운 세션 ID를 알 수 없으므로 공격을 방지할 수 있습니다.
  2. 세션 고정 공격(Session Fixation)
    세션 고정 공격은 공격자가 특정 세션 ID를 미리 지정하고, 이 세션 ID를 사용자에게 강제로 사용하게 함으로써 사용자의 세션을 공격자가 제어하게 만드는 공격입니다.

    이를 방지하기 위해 사용자가 로그인할 때마다 새로운 세션 ID를 발급하는 것이 중요합니다.
  3. 세션 예측 공격(Session Prediction)
    세션 예측 공격은 공격자가 세션 ID 생성 알고리즘을 예측하여 임의의 세션 ID를 생성하고, 그 세션 ID로 사용자의 세션을 도용하는 방법입니다.

    이를 방지하기 위해 세션 ID는 랜덤하고 예측할 수 없는 방식으로 생성해야 합니다.

 

마치며

세션은 웹에서 상태 정보를 관리하는 중요한 방법 중 하나입니다. 세션을 이해하고 올바르게 사용함으로써 사용자의 로그인 상태를 안전하게 유지하고, 좋은 사용자 경험을 제공할 수 있습니다.

 

지적이나 다른 의견은 언제나 환영합니다 :D

감사합니다.

 

See also

https://yepchani.tistory.com/entry/HTTP에-대해-알아보자

https://yepchani.tistory.com/entry/HTTP-쿠키-이해하기

https://developer.mozilla.org/en-US/docs/Glossary/Session_Hijacking

https://en.wikipedia.org/wiki/Session_hijacking

https://en.wikipedia.org/wiki/Session_fixation

https://www.geeksforgeeks.org/session-prediction-software-attack/

 

References

https://en.wikipedia.org/wiki/Session_(computer_science)

'Web' 카테고리의 다른 글

브라우저 핑거프린팅(Browser fingerprinting)이란?  (0) 2024.07.26
웹 스토리지 이해하기  (0) 2024.03.05
HTTP 쿠키 이해하기  (0) 2024.02.13
REST API? 그게 뭔가요?  (0) 2024.02.06
HTTP에 대해 알아보자  (1) 2024.01.30