CS/네트워크

[네트워크] 쿠키와 세션 정리

happy_life 2022. 10. 21. 10:07

웹페이지를 이동할 때마다, 매번 사용자인지를 확인하기 위해 로그인 절차를 진행하는 것은 매우 불편한 일 입니다. 이를 해결하기 위해 어떤 사용자인지를 확인하는 방법으로 쿠키와 세션을 사용하는데, 이 둘의 차이점에 대해 알아보겠습니다.

 

 

네트워크 - 쿠키

1. 개념

사용자가 웹사이트를 접속하면 사용자의 브라우저에 저장되는 파일입니다.

 

 

2. 동작 순서

1) 클라이언트가 페이지를 요청합니다.(로그인)

2) 웹 서버에서는 쿠키에 정보를 담아 생성합니다.

3) 응답에 쿠키를 담아 클라이언트에 전송합니다.

4) 쿠키는 클라이언트가 가지고 있닫가 서버에 요청할 때 쿠키를 전송합니다.

5) 웹 서버는 쿠키를 바탕으로 사용자를 체크합니다. (로그인을 여러번 할 필요가 없음)

 

 

3. 쿠키의 보안 문제

1) 쿠키 값은 임의로 변경할 수 있습니다.  f12를 눌러 개발자 모드로 들어가서 변경할 수 있습니다.

쿠키 변경

 

 

2) 쿠키에 보관된 정보는 탈취할 수 있습니다.

지금은 단순히 id값을 넣어두었지만, 신용카드 정보나, 개인 정보가 있다면 문제가 발생할 수 있습니다. 쿠키의 정보는 내 로컬 PC에서 털릴 수도 있고, 네트워크 전송 구간에서 털릴 수도 있습니다. 

 

 

3) 해커가 쿠키를 한번 훔쳐가면 평생 사용할 수 있습니다.

 

 

4. 대안

1) 쿠키에 중요한 값을 노출하지 않고, 사용자 별로 예측 불가능한 임의의 토큰을 노출하고, 서버에서 토큰과 사용자 id를 매핑해서 인식하게 합니다. 그리고 서버에서 토큰을 관리하는 방법입니다.

 

2) 토큰은 해커가 예상할 수 없어야 합니다.

 

3) 해커가 토큰을 털어가도 시간이 지나면 사용할 수 없도록 만료시간을 짧게 설정합니다. 

 

 

 

네트워크 - 세션

1. 개념

쿠키와 달리 세션은 세션ID를 키 값으로 서버에 클라이언트 관련 데이터를 저장하고, 세션ID만 쿠키에 담아 클라이언트에 전달합니다. 이를 통해 웹 사이트에서 사용자를 판단할 수 있습니다. 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고 합니다.

 

 

2. 동작 순서

1) 클라이언트가 서버로 접속을 시도합니다.

2) 서버는 Cookie를 확인해서 클라이언트의 해당 session-ID가 있는지 확인합니다.

3) 만약 session-ID가 존재하지 않으면 서버에서 session-ID를 생성해 클라이언트에게 돌려줍니다.

 

 

3. 핵심

1) 클라이언트와 서버는 결국 쿠키로 연결되어야 합니다.

2) 회원과 관련된 정보는 전혀 클라이언트에게로 전달되지 않습니다.

3) 추정 불가능한 세션 ID만 쿠키를 통해 클라이언트에 전달됩니다.