웹페이지를 이동할 때마다, 매번 사용자인지를 확인하기 위해 로그인 절차를 진행하는 것은 매우 불편한 일 입니다. 이를 해결하기 위해 어떤 사용자인지를 확인하는 방법으로 쿠키와 세션을 사용하는데, 이 둘의 차이점에 대해 알아보겠습니다.
네트워크 - 쿠키
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만 쿠키를 통해 클라이언트에 전달됩니다.
'CS > 네트워크' 카테고리의 다른 글
[네트워크] DNS를 통한 IP 주소 확인 과정 (0) | 2023.01.09 |
---|---|
[네트워크] 네트워크 통신 과정 기초 (1) | 2023.01.04 |