상태 유지 및 관리의 필요성
최초의 웹은 단순히 문서를 전달 받고 정보를 공유하는 목적으로 사용되었으며, 이 경우에는 상태 유지 및 관리가 굳이 필요하지 않다. 그러나 오늘날의 웹은 쇼핑몰에서 원하는 상품을 장바구니 혹은 카트에 담고 쇼핑이 완료되면 결제하고 결제가 완료되면 정상적으로 결제가 되었는지 확인을 하며, 예상 도착일을 본다. 또한 한번의 로그인을 통해 다른 페이지 접근 시 나에 대한 상태 정보가 유지 된다. 이러한 상태 유지 및 관리를 위해서는 쿠키가 사용된다.
쿠키
쿠키를 통해 사용자 식별 및 세션 유지를 통해 클라이언트와 서버 간의 상태 관리를 한다.
웹의 중요한 기술중의 하나로 현재 가장 많이 사용되고 있는 인증 방식이다.
쿠키의 종류는 지속 쿠키, 세션 쿠키가 있다.
쿠키 → 지속 쿠키(Persistent Cookie)
세션 → 세션 쿠키(Session Cookie)
쿠키 헤더 구조
서버에서 클라이언트로 쿠키 발급 시 Set-Cookie 헤더에 의해 클라이언트 쿠키 값이 세팅되며, 해당 사이트 접근 시 마다 클라이언트는 Set-Cookie에 의해 세팅된 값을 Cookie 헤더에 세팅하여 요청 메시지를 전달한다. 서버는 이를 통해 상태 관리를 한다.
지속 쿠키(Persistent Cookie)
지속 쿠키는 웹 서버에서 발급 시 클라이언트 하드 디스크에 텍스트 형태로 저장이 된다.
클라이언트 PC 사용자들은 해당 쿠키 정보를 열람할 수 있다.
보안에 취약하다.
지속 쿠키(Persistent Cookie) - 쿠키 발급 과정
아래는 지속 쿠키를 기반으로 된 로그인 기능이다.
1. 클라이언트 → 서버 = 로그인 시도
2. 서버 → 클라이언트 = 응답값 전송, Set-Cookie 세팅, 클라이언트는 해당 사이트에 대한 쿠키값 세팅
3. 클라이언트 → 서버 = Cookie 헤더에 의해 사용자 식별됨, 로그인 계정 지속 유지
지속 쿠키(Persistent Cookie) - 쿠키 폐기 과정
쿠키에 대한 폐기 과정은 다음과 같다.
1. 클라이언트 → 서버 = 로그아웃 요청
2. 서버 → 클라이언트 = Set-Cookie의 삭제시킬 id전송, 클라이언트에서 해당 사이트에 대한 쿠키값이 삭제된다.
지속 쿠키(Persistent Cookie) - 문제점
쿠키를 폐기하여도 해당 값을 알고 있으면 재사용이 가능한 문제점이 있다.
즉, 폐기 후에도 재사용이 가능하다는 것이다. 또한 쿠키 값이 평문일 경우 변조의 위험이 있기 때문에 사용자 식별 및 인증 관리를 할 경우 반드시 암호화 과정을 거쳐야 한다. 또한 쿠키의 유효기간에 따른 폐기 방법, 암호화 알고리즘에 대한 적절성 등을 잘 검토하여 쿠키 발급 로직을 구현해야 한다.
세션 쿠키(Session Cookie)
세션 쿠키는 웹 서버에서 발급 시 클라이언트 웹 브라우저 캐시에 저장되며, 정상적으로 로그인 시 웹 어플리케이션 서버는 서버 측에 해당 세션에 대한 정보를 저장한다. 이때 서버에서 세션을 저장하는 방법으로 메모리, 파일 시스템, 데이터베이스에 저장하는 방법들이 있으며, 일반적으로 메모리에 저장해 둔다. 그리고 세션은 문자가 암호화, 난독화 되어 있는 형태가 아닌 임의의 문자들이 무작위로 나열된 것으로 공격자 측에서는 특정 사용자의 세션을 추측하기는 어렵다.
세션 쿠키(Session Cookie) - 세션 발급 과정
아래는 세션 쿠키를 기반으로 된 로그인 기능이다.
1. 클라이언트 → 서버 = 로그인 시도, 웹 어플리케이션 서버에 세션값(의미없는 문자열 + 로그인 데이터) 저장
2. 서버 → 클라이언트 = 응답값 전송, Set-Cookie 세팅, 클라이언트는 해당 사이트에 대한 세션값 세팅
3. 클라이언트 → 서버 = Cookie 헤더를 통해 세션값을 세팅, 서버에 저장된 세션으로 인해 로그인 지속 유지
세션 쿠키(Session Cookie) - 세션 폐기 과정
아래는 세션 폐기 과정이다.
1. 클라이언트 → 서버 = 로그아웃 요청, 서버에서 해당 계정에 대한 세션값 삭제
2. 서버 → 클라이언트 = 로그아웃 완료
세션 쿠키는 지속 쿠키와 다르게 폐기 후 재사용에 대한 문제점이 해결된다.
→ 서버에서 세션값을 삭제했기 때문에, 동일한 문자열의 세션값으로 로그인 시도를 해도 로그인이 되지 않는다.
지속 쿠키의 필요성
세션 쿠키를 사용하면 되지, 왜 지속 쿠키를 사용할까?
세션 쿠키를 사용하면 보안 담당자, 개발자들이 편하다.
그러나 대규모 웹 서비스의 경우 수많은 사용자들의 세션을 관리하기에는 서버에 엄청난 부하를 가져온다.
이러한 이유로 서버에 부담이 낮은 지속 쿠키 사용을 많이 선호한다.
쿠키와 세션의 차이는 여기를 참고
참고
https://www.inflearn.com/course/%EC%9B%B9-%EA%B8%B0%EC%88%A0-%EA%B8%B0%EC%B4%88
'웹 해킹 > 웹 기초 지식' 카테고리의 다른 글
Cilent-Side Script, Server-Side Script에 대한 이해 (1) | 2024.11.15 |
---|---|
웹 아키텍처 분석 (4) | 2024.11.14 |
웹의 핵심 기술 HTTP 프로토콜 (0) | 2024.11.08 |
XAMPP 설치 및 URL 예약문자, URL 인코딩 실습 (3) | 2024.11.07 |
자원을 지정하는 URL (0) | 2024.11.06 |