cod36eek.space
cod36eek blog

[23-W] Webhacking 02. (3) cookie & session

October 4, 2023

이번 시간의 주제

다음 시간의 웹 해킹 첫 실습을 위해 필요한, 웹에 대해 더 구체적인 배경지식 전반을 다룹니다.

  • Cookie, Session

Cookie

HTTP는 하나의 Request와 Response의 쌍이 독립적으로 구성되어 통신하는 connectionless, stateless 프로토콜입니다.

connectionless 속성은 하나의 요청에 하나의 응답을 한 후 네트워크 연결을 끝맺는 것을 의미합니다. 불특정 다수의 사용자에게 서비스되어야 하는 웹의 특성상 계속해서 연결상태를 유지하는 것은 서버 부하로 이어질 가능성이 있어 connectionless를 갖게 되었습니다.

stateless 속성은 네트워크가 연결이 끝맺을 때 상태를 유지하지 않는 것을 의미합니다. HTTP 요청마다 새로운 커넥션을 열기 때문에 사용자 인증을 계속해서 해야 한다는 단점이 있습니다. 이러한 단점을 개선하기 위해 상태를 유지하기 위한 Cookie(쿠키)가 탄생했습니다.

웹 브라우저는 HTTP ResponseSet-Cookie Header나 Javascript document.cookie를 통해 데이터를 쿠키에 저장합니다.

  • HTTP Response
HTTP Response

HTTP/1.1 200 OK
Server: Apache/2.4.29 (Ubuntu)
Set-Cookie: name=test;
Set-Cookie: age=30; Expires=Fri, 30 Sep 2022 14:54:50 GMT;
  • Javascript
document.cookie = "name=test;"
document.cookie = "age=30; Expires=Fri, 30 Sep 2022 14:54:50 GMT;"

데이터를 key=value; 쌍으로 쿠키에 저장하고 ;뒤에 쿠키의 만료시간, 접근할 수 있는 도메인 등 추가 옵션을 설정할 수 있습니다.

추후 HTTP 요청을 보낼 때 웹 브라우저가 자동으로 헤더에 쿠키를 추가해 전송합니다.

쿠키는 인증 상태를 포함할 수 있습니다. 아래 예제에서 브라우저는 Cookie: id=guest;를 서버에 보내고 서버는 해당 정보를 통해 인증된 사용자의 정보를 응답합니다.

쿠키는 사용자의 브라우저에 저장됩니다.

GET /me HTTP/1.1
Host: blog.cod36eek.space
Cookie: id=guest;

F12 (DevTools)를 사용해서도 해당 웹에 사용되고 있는 쿠키를 확인할 수 있습니다.

Session

쿠키에 인증 상태를 포함한 데이터를 저장하면 사용자가 임의 사용자로 인증된 것 처럼 요청을 조작할 수 있습니다. 따라서 서버에 데이터를 저장하기 위해 Session(세션) 을 사용합니다. 세션을 활용하면 데이터를 서버에 저장하고 해당 데이터에 접근할 수 있는 유추할 수 없는 랜덤한 문자열 키를 만들어 응답하며, 이를 보통 Session ID라고 부릅니다. 브라우저는 해당 키를 쿠키에 저장하고 이후에 HTTP 요청을 보내면 서버에서 키에 해당하는 데이터를 가져와 인증 상태를 확인합니다.

쿠키는 데이터 자체를 사용자가 저장하며, 세션은 서버가 저장한다는 핵심적인 차이가 있습니다.

© Copyright 2023 cod36eek.space. Powered with by CreativeDesignsGuru