Cookie
HTTP에서는 Connectionless와 Stateles라는 특징 때문에 웹 서버가 클라이언트를 기억할 수 없다.
이때 웹 서버가 클라이언트를 식별할 수 있도록 만든 것이 바로 cookie이다.
coockie는 웹 서버가 클라이언트한테 발급하고, 클라이언트는 cookie를 요청에 포함하여 전송한다.
cookie는 key와 value로 이루어져 있다.
→ 쿠키는 일반적으로 클라이언트의 정보 기록과 상태 정보를 표현하는 용도로 사용하고, 클라이언트에 저장된다.
HTTP 프로토콜 특징
Connectionless | 하나의 요청에 하나의 응답을 한 후 연결을 종료하는 것을 의미한다. 특정 요청에 대한 연결은 이후의 요청과 이어지지 않고 새 요청이 있을 때 마다 항상 새로운 연결을 맺는다. |
Stateless | 통신이 끝난 후 상태 정보를 저장하지 않는 것을 의미한다. 이전 연결에서 사용한 데이터를 다른 연결에서 요구할 수 없다. |
위처럼 HTTP 프로토콜은 웹 서버와의 통신이 끝난 후 연결을 끊어버리기 때문에 웹 서버는 클라이언트를 기억할 수 없다.
따라서 cookie에 사용자를 식별할 수 있는 정보를 담아 HTTP 요청에 함께 전달하는 것이다.
하지만, 보안적인 문제도 존재한다.
cookie에 사용자 인증 정보를 담아 전달하기만 하면 요청하는 리소스를 얻을 수 있기 때문에 다른 사용자가 자신을 사칭하여 개인정보를 탈취할 수도 있다.
Session
cookie는 인증 정보를 변조할 수 있기 때문에 다른 방법이 필요하다.
session은 cookie와는 달리 인증 정보를 서버측에 저장(session storage)하고, 해당 데이터에 접근할 수 있는 key를 클라이언트에 전달한다.
이 키를 Seesion ID라고 한다.
브라우저에서는 Session ID를 cookie에 저장하고, HTTP 요청을 보낼 때마다 함께 전달한다.
서버에서는 key에 대응하는 데이터를 가져와서 인증 상태를 확인한다.
→ 개발자 도구의 Application 탭에서 cookie를 확인할 수 있다.
https://dreamhack.io/lecture/courses/166
'Study > Web Hacking' 카테고리의 다른 글
[dreamhack] cookie (0) | 2022.01.25 |
---|---|
[dreamhack] devtools-sources (0) | 2022.01.25 |
[dreamhack] web browser (0) | 2022.01.25 |
[dreamhack] web (0) | 2022.01.25 |
[dreamhack] http/https (0) | 2022.01.25 |