쿠키는 웹 브라우저에서 서버로 전송되는 작은 데이터 조각입니다.
쿠키는 웹 사이트를 방문할 때 생성되며 브라우저에 저장됩니다. 이후 새로운 요청시에 쿠키를 헤더에 담아 서버로 보냅니다. 일반적으로 유효 기간을 가지고 있으며, 이 유효 기간이 지나면 자동으로 삭제됩니다. 또한 사용자가 브라우저 캐시를 삭제하면 쿠키도 함께 삭제됩니다.
중요한 것은 쿠키는 웹 사이트가 사용자의 동의 없이 생성하고 사용할 수 없다는 것입니다. 그래서 GDPR(일반 데이터 보호 규정)와 같은 법적 규제가 있으며, 웹 사이트는 쿠키의 사용을 명확하게 설명하고, 사용자가 쿠키 사용에 동의할 수 있는 방법을 제공해야 합니다.
또한 쿠키에 중요한 개인 정보를 저장하면 안 됩니다.
왜냐하면 쿠키에 저장된 정보는 브라우저와 웹 서버 간에 전송될 때 평문으로 전송됩니다. 이는 중간자 공격 등의 공격에 취약하게 만들어 정보가 노출될 수 있습니다. CSRF (Cross-Site Request Forgery) 공격이나 XXS 공격이 그 예시입니다.
그렇다면 왜 사용하는가?
그럼에도 사용하는 데에는 이유가 있습니다.
중요한 정보를 저장하는 것이 아니라면 훌륭한 시스템이라는 것입니다.
다음과 같은 사용 예시들이 있습니다.
세션 ID
사용자가 로그인한 후, 서버는 해당 사용자를 식별하기 위한 고유한 세션 ID를 생성하고, 이를 쿠키에 저장합니다. 이후 사용자가 서버로 요청(Request)을 보낼 때마다 해당 세션 ID가 서버로 전송되어, 서버는 해당 세션 ID를 통해 사용자를 식별합니다.
사용자 설정
사용자의 언어 설정, 화면 크기 설정, 테마 설정 등과 같이 웹 사이트의 사용자 정의 설정 정보를 저장할 수 있습니다.
장바구니
쇼핑몰과 같은 웹 사이트에서는 사용자가 장바구니에 추가한 상품 정보를 쿠키에 저장하여, 사용자가 다른 페이지를 방문하더라도 장바구니에 추가한 상품을 유지할 수 있도록 합니다.
방문 기록
사용자가 이전에 방문한 페이지의 URL 정보를 저장하여, 사용자가 다시 방문할 때마다 이전 방문 기록을 보여주는 등의 기능을 제공할 수 있습니다.
광고 추적 정보
광고 회사들은 사용자의 광고 선호도와 관련된 정보를 쿠키에 저장하여, 사용자에게 관심 있는 광고를 제공합니다.
보안 문제가 있을 수 있는 쿠키에 세션을 저장한다는 것이 이상하다고 생각할 수도 있겠지만 세션 ID는 무작위로 생성된 고유한 문자열이며, 서버에서 발급된 값으로 클라이언트에서 조작할 수 없습니다. 또한, 서버는 해당 세션 ID를 통해 사용자를 식별하고, 세션 ID가 유효한지 여부를 검증합니다. 따라서, 세션 ID를 사용하여 사용자를 식별하는 것은 일반적으로 안전하다고 볼 수 있습니다.
어떻게 사용하는가?
쿠키는 HTTP 응답(Response)의 Set-Cookie 헤더를 통해 생성됩니다. 헤더에는 쿠키의 이름, 값, 만료 날짜, 경로 및 도메인 등을 포함합니다.
쿠키가 생성되면, 웹 브라우저는 쿠키를 저장하고, 이후에 웹 사이트를 방문할 때마다 서버에게 쿠키를 전송합니다. 이를 통해 서버는 사용자의 이전 상호 작용 기록을 기억하고, 사용자가 세션을 유지할 수 있습니다.
다음은 서버에서 응답한 HTTP 메시지의 일부이자 쿠키 설정의 예시입니다.
Set-Cookie: user_id=12345; Expires=Wed, 21 Apr 2023 15:23:27 GMT; Domain=example.com; Path=/; Secure; HttpOnly; SameSite=Lax
하나씩 살펴보겠습니다.
user_id=12345
쿠키의 이름과 값입니다.
Expires=Wed, 21 Apr 2023 15:23:27 GMT
쿠키의 만료 날짜 및 시간을 지정합니다.
Domain=example.com
쿠키가 전송될 도메인을 지정합니다.
Path=/
쿠키가 전송될 URL 경로를 지정합니다. 이 경로를 포함한 하위 경로 페이지만 해당 쿠키를 사용할 수 있습니다.
Secure: HTTPS
프로토콜을 사용하는 경우에만 쿠키를 전송하도록 합니다.
HttpOnly
쿠키를 JavaScript를 통해 접근할 수 없도록 합니다.
SameSite=Lax
SameSite 속성을 Lax로 설정하여, 동일한 사이트에서만 쿠키를 전송하도록 합니다.
이후에는 아시다시피 브라우저는 웹 사이트를 방문할 때마다 해당 도메인에 대한 쿠키를 찾아서 요청(Request) 헤더에 포함시키고, 서버는 이를 통해 이전 상호 작용에 대한 정보를 제공할 수 있습니다.
'정보처리기사' 카테고리의 다른 글
[정보처리기사] 웹 세션(Session)이란? (0) | 2023.04.20 |
---|---|
[정보처리기사] 웹 캐시(Cache)란? (0) | 2023.04.19 |
[정보처리기사] HTTP 통신 (HyperText Transfer Protocol)이란? (0) | 2023.04.19 |
[정보처리기사] OSI 7계층 (Open Systems Interconnection) (0) | 2023.04.19 |
[정보처리기사] 데이터베이스의 개념적, 논리적, 물리적 설계 (0) | 2023.04.18 |