CS

[Web] 세션과 쿠키란 무엇일까?

뽀글보리 2021. 10. 4. 11:46
반응형

1. HTTP의 특징

  • 비연결성 (connectionless)
    • 클라이언트의 요청을 받고 응답을 하면 연결을 끊어 버리는 특징
  • 무상태성 (stateless)
    • 통신이 끝나면 상태를 유지하지 않는 특징

 

왜 HTTP는 비연결성과 무상태성이란 특성을 가질까?
  • HTTP 프로토콜은 인터넷 상에서 불특정 다수의 통신 환경을 기반으로 설계되어 있다. 따라서 다수의 클라이언트와의 연결을 계속 유지하는 방식을 사용한다면 리소스가 많이 소요된다.

 

  • 그러나 상태 정보를 유지해야 할 경우가 있다. 예를 들어서 로그인 상태 유지 !

 

2. 🍪  쿠키란?

  • 쿠키는 클라이언트 로컬에 저장되는 키와 값이 들어있는 형식의 데이터 파일
  • 세션 쿠키 (Session Cookie)
    • 브라우저내에 저장되어 브라우저 종료시 쿠키를 삭제
  • 지속 쿠키 (Persistent Cookie)
    • 만료 시간이 지정되면, 로컬에 파일로 저장 되므로, 브라우저를 닫거나 컴퓨터를 재시작해도 남아있다.

3. 쿠키 동작 방법

 

reponse 헤더에 Set-Cookie를 사용해서 쿠키를 저장할 수 있도록 한다

Set-Cookie:user="lily";domain="demo.com";path="/hello"

어떤 웹사이트의 경로에서 쿠키를 읽을 수 있는 지에 대해 제어 가능하다.

 

  • 쿠키의 캐싱

쿠키를 캐싱하게 되면, 이전 사용자의 쿠키가 다른 사용자에게 할당되거나 다른 사람에게 노출 될 수 있다.

Cache-Control:no-cache="Set-Cookie"

따라서 브라우저에서 서버의 'Set-Cookie'헤더를 캐시하지 않도록 설정할 수 있다.

 

4. 쿠키의 단점

사용자에게 저장되기 때문에 임의로 고치거나 지우거나 가로채기 쉽다. 따라서 쿠키에는 민감한 정보를 담지 않는 것이 좋다.

 

5. 세션이란?

  • 세션 아이디는 웹 브라우저당 한개씩 생성, 브라우저 종료 시 소멸
  • 서버에서 클라이언트 구분을 위해 세션 ID를 부여하고, 브라우저를 종료할 때까지 상태를 유지한다.

6. 세션의 동작 방식

  • 클라이언트가 서버에 처음으로 Request를 보낸다.
  • 서버에서 session Id 값이 쿠키에 없는 것을 확인하고 새로 발급하여 응답한다.
  • 클라이언트는 쿠키를 이용해 세션 ID를 저장하고 있는다.
  • 서버에 요청을 보낼 때마다 세션 ID를 서버에 전달한다.
  • 클라이언트가 로그인을 할경우, 사용자 정보로 갱신하고 새로운 session id를 발급하여 응답한다.
  • 브라우저 종료시 session id 제거

 

  • 주의점
    • 사용자가 많아질수록 많은 서버 메모리를 차지한다.

 

7. 쿠키와 세션 비교 차이점

  • 보안 : 세션 방식이 보안 면에서 더 우수하다
  • 라이프 사이클 : 세션은 브라우저 종료가 되면 만료시간에 상관없이 삭제된다.

 

과연 세션 방식이 보안 면에서 우수할까?
  • 결국 세션도 쿠키를 사용하여 세션 ID를 저장한다.
  • 만약 쿠키값에 있는 세션 ID가 유출당했을 경우에는 보안상 문제가 생긴다.
  • 이는 HTTPS 프로토콜 사용을 통한 암호화 등의 네트워크 보안 문제 해결을 통하여 예방할 수 있다.

 

8. 보안 : Session Attacks

  • Session Token Hijacking
    • 공격자가 토큰을 얻을 수 있는 경우
    • Solution : HTTPS 사용 (SSL/TLS encryption 보장)

 

  • Cross-Site Request Forgery (CSRF)
    • 브라우저는 서버에 대한 쿠키를 항상 포함하고 있다.
    • 예시) 
      • 은행 사이트에 로그인 한 후에
      • 공격자의 사이트에 방문한다
      • 공격자는 은행 이체 form을 채워 은행 사이트에 요청을 보낸다.
    • Solution
      • Referrer 검증 : request의 referrer을 확인하여 domain이 일치하는 지 검증 (ex. wooribank.com)
      • CSRF Token 사용 : 사용자의 세션에 난수값을 저장하고, 요청마다 난수 값을 포함하여 전송한다. 서버에서는 세션에 저장된 값과 요청 파라미터에서 전달되는 값이 일치하는 지 검증한다
반응형