클라이언트의 IP 주소와 사용자 에이전트는 매번 변경될 수 있는 고유하지 않은 정보일 뿐만 아니라,
HTTP 프로토콜의 비연결그리고 무국적자 웹 서버의 특성상 클라이언트는 기억할 수 없습니다.
이러한 속성을 사용하여 HTTP에서 상태를 유지하기 위해 쿠키가 생성되었습니다.
쿠키는 키와 값으로 구성된 엔터티 유형입니다. 서버가 클라이언트에게 쿠키를 발행하면 클라이언트는 서버에 요청을 보낼 때 쿠키를 함께 보냅니다. / 서버는 클라이언트의 요청에 포함된 쿠키가 존재하는지 여부를 확인하여 클라이언트를 식별할 수 있습니다.
쿠키의 속성
–비연결: 요청에 대한 응답 후 연결 종료
특정 요청에 대한 연결은 후속 요청으로 이어지지 않으며 항상 새 요청마다 새 연결을 설정합니다.
–무국적자: 통신 종료 후 상태 정보가 저장되지 않음
이전 연결에서 사용한 데이터는 다른 연결에서 요청할 수 없습니다.
쿠키의 목적
–정보 기록
웹서비스 이용시 팝업창에 “다시 표시 안함” 버튼이 쿠키에 의해 표시되는 것을 확인할 수 있습니다.
과거에는 쿠키가 고객 정보를 저장하는 데 널리 사용되었습니다. 서버와 통신할 때마다 쿠키가 전송되기 때문에 불필요한 요청으로 인한 리소스 낭비를 줄이기 위해 최신 저장소 API를 사용하는 것이 좋습니다.
–상태 정보
웹 서버는 수많은 클라이언트와 사용자의 로그인 상태를 구분해야 하며 이때 클라이언트를 식별할 수 있는 값을 쿠키에 저장하여 사용합니다.

(쿠키 없는 통신) 서버는 클라이언트가 누구에게 요청을 보냈는지 모르기 때문에 현재 어떤 클라이언트와 통신하고 있는지 알 수 없습니다.

(쿠키로 통신) 클라이언트가 서버에 요청을 보낼 때마다 쿠키를 포함하고 서버는 이 쿠키로 클라이언트를 식별합니다.
쿠키 조작
쿠키는 클라이언트의 브라우저에 저장되고 요청에 포함된 정보 조각입니다.
따라서 악의적인 클라이언트는 쿠키 정보를 조작하고 서버에 요청을 보낼 수 있습니다.
서버가 쿠키를 통한 추가 확인 없이 사용자의 인증 정보를 식별하면 공격자는 아래 그림과 같이 다른 사용자를 사칭하여 정보를 도용할 수 있습니다.

인증 상태를 쿠키에 저장하지만 클라이언트가 인증 정보를 변조할 수 없도록 합니다. 회의(회의)사용

인증 정보를 서버에 저장하고 데이터에 접근할 수 있는 **Key(Session ID)** 생성 -> Client에게 전달
-> 브라우저는 쿠키에 키를 저장하고 나중에 HTTP 요청을 보낼 때 사용합니다. -> 서버는 요청에 포함된 키에 해당하는 데이터를 검색하고 인증 상태를 확인합니다.
세션의 예: 중국 식당에서 각 고객은 무작위로 쓰여진 문자열이 있는 바우처를 받습니다. 레스토랑은 바우처에 적힌 문자열과 방문 횟수를 기록해 이벤트를 진행한다. 고객은 임의의 문자열을 조작할 수 있지만 매장에 기록된 방문 횟수를 조작하게 됩니다.
주요 차이점은 쿠키는 데이터 자체를 저장하고 세션은 서버에 의해 저장된다는 것입니다.
쿠키의 적용
쿠키는 클라이언트에 저장되기 때문에 클라이언트는 저장된 쿠키를 보고, 변경하고, 추가할 수 있습니다. 클라이언트가 서버에 요청을 보낼 때 저장된 쿠키는 요청 헤더에 포함되어 전송되므로 사용자가 요청을 보낼 때 쿠키 헤더가 변조될 수 없습니다. 쿠키를 설정할 때 클라이언트에서 쿠키가 삭제된 후 만료 시간을 지정할 수 있습니다. 클라이언트(브라우저)에서 관리합니다. 쿠키는 서버와 클라이언트 모두에서 설정할 수 있습니다.
섬기는 사람
- HTTP 응답 헤더에 Set-Cookie 헤더를 추가하면 클라이언트의 브라우저가 쿠키를 설정합니다.
HTTP/1.1 200 확인
서버: Apache/2.4.29(우분투)
쿠키 설정: name=test;
쿠키 설정: 연령=30; Expires=2022년 9월 30일 금요일 14:54:50 GMT;…
고객
- JavaScript로 쿠키를 설정하십시오.
document.cookie = “이름=테스트;”
document.cookie = “나이=30; 만료=2022년 9월 30일 금요일 14:54:50 GMT;”
클라이언트가 쿠키를 처리하는 방법
- 크롬 콘솔 사용
: 우클릭 후 검사 클릭 후 콘솔 탭에 document.cookie 입력

- 크롬 애플리케이션 사용
: 오른쪽 클릭 후 검사 버튼을 눌러 애플리케이션 좌측의 쿠키 확장
귀하가 설정한 쿠키 정보는 웹사이트를 클릭하여 확인/변경하실 수 있습니다.

관행

- 사이트 로그인 창을 마우스 오른쪽 버튼으로 클릭하고 검사를 클릭한 다음 네트워크 탭을 클릭합니다. -> 로그 유지를 선택하고 로그인에 성공하면 응답을 확인합니다. Set-Cookie-Header 저장에 대한 정보를 볼 수 있습니다.

2. Chrome Inspector 및 쿠키 목록에서 애플리케이션을 클릭합니다. https://dreamhack.io 를 클릭하면 서버의 Set-Cookie 헤더를 통해 설정된 쿠키를 확인할 수 있습니다.

3. Sessionid 헤더 값을 메모장에 복사한 후 Sessionid 헤더 값을 마우스 오른쪽 버튼으로 클릭하고 삭제를 클릭하면 브라우저 쿠키에 저장된 Session 값이 삭제됩니다.
세션 값을 지우고 Dreamhack 페이지를 새로 고치면 로그인이 잠금 해제된 것을 확인할 수 있습니다.

4. 쿠키의 빈 공간을 더블 클릭하여 sessionid 헤더를 추가하고 앞에서 복사한 세션 값을 입력하여 브라우저의 쿠키에 세션 값을 설정합니다.
세션 값을 설정하고 Dream Hack 페이지를 새로 고치면 로그인됩니다.
세션 정보는 쿠키에 저장되며, 서버는 이를 통하여 이용자를 식별하고 인증을 처리합니다. 공격자가 사용자의 쿠키를 훔칠 수 있는 경우 **세션 하이재킹**으로 알려진 사용자의 세션별 인증 상태를 훔칠 수 있습니다.
예어
- 비연결: 요청에 대한 응답 후 연결을 닫는 것을 의미
- 무국적자: 통신 종료 후 상태 정보가 저장되지 않음
- 쿠키: HTTP에서 상태를 유지하는 데 사용되는 키 값 유형 값
- 회의: 쿠키에 포함된 세션 ID를 이용하여 서버에 저장된 세션 데이터에 접근하는 방식
- 세션 인계 : 다른 사용자의 쿠키를 도용하여 인증정보를 획득하기 위한 공격