서론
웹 서비스: HTTP프로토콜을 사용하여 client와 server간의 통신
웹 서버는 어떻게 각 클라이언트를 식별할까?
HTTP header에 각 클라이언트는 자신임을 인증하기위한 식별 정보를 헤더에 포함 시킬 수 있다.
쿠키
클라이언트의 IP와 User-agent는 매번 변경되는 정보.
HTTP 프로토콜
Connectionless
클라이언트와 서버가 한 번 연결을 맺은 후, 클 라이언트 요청에 대해 서버가 응답을 마치면 맺었던 연결을 끊어 버리는 성질
Stateless
서버가 클라이언트의 세션 상태 및 세션 정보를 저장하지 않는 네트워크 프로토콜
입니다. 즉, 요청에 대한 응답만 처리하는 방식
즉, 웹 서버는 클라이언트를 기억할 수 없다.
Cookie
위의 단점을 극복하고 상태를 유지하기 위해 탄생
Key와 Value로 이루어짐.
서버가 클라이언트에게 쿠키를 발급하면, 클라이언트는 서버에게 쿠키를 같이 전송.
이를 통해, 서버는 각 클라이언트를 식별할 수 있다.
쿠키 변조
발급받은 쿠키를 악의적인 클라이언트가 ‘변조’하여 서버에 요청
서버가 쿠키에 대한 검증을 하지 않는다면 공격자가 타 이용자를 사칭하여 정보를 탈취할 수 있음
세션
앞서 설명한, 쿠키의 변조를 확인하기 위해 서버는 ‘세션’을 도입
인증 정보를 서버에 저장, 해당 데이터에 접근할 수 있는 임의의 키를 만들어 클라이언트에게 전달
클라이언트는 위와 같은 ‘Session ID’를 클라이언트 브라우저에 저장해두었다가 HTTP요청을 보낼 때 사용
클라이언트 GET 요청시 ” 이름: 임정환 , 세션 ID: 1234”를 전송 . 서버는 ‘임정환’의 세션 ID가 ‘1234’인지 확인.
쿠키 vs 세션
쿠키는 데이터 자체를 이용자가 저장
세션은 서버가 저장