Cookie ?
쿠키란 하이퍼 텍스트의 기록서(HTTP)의 일종으로서 인터넷 사용자가 어떠한 웹사이트를 방문할 경우 그 사이트가 사용하고 있는 서버를 통해 인터넷 사용자의 컴퓨터에 설치되는 작은 기록 정보 파일을 일컫는다. HTTP 쿠키, 웹 쿠키, 브라우저 쿠키라고도 한다.
쿠키는 HTTP 프로토콜의 특징인 비상태성(Stateless)으로 인해 사용자의 연속되는 요청들이 동일 사용자의 요청인지 식별하거나 웹사이트 내에서 사용자의 상태를 기억하기 위해 탄생했습니다. 쿠키는 온라인 쇼핑몰의 "최근 본 상품" 등 민감하지 않지만 서비스 제공에 필요한 데이터를 쿠키로 설정하여 사용하기도 하지만 사용자의 인증에도 사용되므로 공격자의 표적이 되기 쉽습니다.
Cookie 사용 용도
쿠키를 사용하는 목적은 일반적으로 사용자의 상태 데이터를 기억하여 아래와 같은 목적을 달성하기 위해 사용됩니다.
- 세션 관리: 웹 사이트가 사용자를 식별하고 사용자의 로그인 정보를 기억할 수 있도록 합니다.
- 개인화: 사용자별 맞춤형 광고나 웹 사이트내 환경 설정 등과 같이 사용자의 웹사이트 환경을 개인화하기 위해 사용됩니다.
- 사용자 활동 추적: 사용자의 웹사이트 사용 패턴이나 검색 습관 등을 추적하고 분석하여 사용자가 선호할만한 다른 컨텐츠를 제안할 수 있도록 합니다.
Cookie 유형
- 세션 쿠키(Session Cookie): 사용자가 웹 사이트를 방문하고 있는 동안 메모리에 저장되는 쿠키입니다. 임시 쿠키, 인메모리(In-Memory) 쿠키라고도 합니다. 사용자가 웹 브라우저를 닫을 때 삭제되며, 별도의 만료일자나 유효기간이 설정되지 않은 쿠키가 세션 쿠키로 간주됩니다.
- 영구 쿠키(Persistent Cookie): 서버에 의해 만료 일시(Expires 속성)나 유효 기간(Max-Age 속성)이 설정된 쿠키이며 사용자의 하드디스크에 저장됩니다. 웹 브라우저가 닫힐 때 삭제되는 세션 쿠키와는 달리 설정된 만료 일시가 종료되거나 유효 기간이 종료되었을 때 삭제됩니다.
쿠키 발급
쿠키는 클라이언트의 HTTP 요청을 수신한 서버가 응답을 회신할 때 Set-Cookie 응답 헤더를 통해 발급
- Set-Cookie: 응답 헤더의 기본 형식
Set-Cookie: Cookie-name=Some-Value;
또한, Set-Cookie 헤더는 다음의 속성들을 통해 웹 브라우저가 쿠키를 처리하는 방법을 제어할 수 있다.
- Expires: 쿠키의 유효 기간을 설정한다. 아래 예시는 20년 10월 7일 05시 56분 24초까지 유효한 쿠키이며, 쿠키의 발급시간 기준으로 1200초 동안 서버로 전송된다.
Set-Cookie: Cookie-name=Some-value; **expires=Fri, 09-Mar-2024 05:56:24 GMT; Max-Age=1200;**
- Domain: 웹 브라우저에 의해 쿠키가 전송될 도메인을 결정한다. 이 속성에는 쿠키를 발급하는 도메인의 최상위 도메인과 그 하위도메인에만 설정할 수 있다. 아래와 같이 최상위 도메인을 설정하게 되면 "example.com" 과 같은 모든 하위도메인에 대한 요청에도 쿠키를 전송하게 된다. 만약 이 속성이 지정되지 않는다면 요청된 리소스가 있는 도메인으로 간주되며 이 때는 하위도메인은 포함되지 않는다.
Set-Cookie: Cookie-name=Some-value; **Domain=example.com;**
- Path: 웹 브라우저에 의해 쿠키가 전송될 URL 경로를 결정한다. 아래 예시는 Domain 속성이 지정되지 않았으므로 위에서 설명한 것과 같이 요청된 리소스가 있는 도메인의 /bbc 경로 혹은 그 하위 경로로 요청할 때만 쿠키를 전송한다.
Set-Cookie: Cookie-name=Some-value; **Path=/bbc;**
- Secure: HTTPS를 통한 암호화된 연결인 경우에만 쿠키를 전송할 수 있으며, 별도의 값을 가지지 않는다.
Set-Cookie: Cookie-name=Some-value; **Secure;**
- HtttpOnly: 클라이언트측에서 자바스크립트(Document.cookie)를 통해 쿠키에 접근할 수 없게 하며, 별도의 값을 갖지 않는다. XSS 공격의 완화 수단으로 사용된다.
Set-Cookie: Cookie-name=Some-value; **HttpOnly;**
- SameSite: 크로스 도메인을 통한 요청에 쿠키를 포함시킬지 여부를 결정한다. 설정 가능한 값으로는 Lax, Strict, None이 있다. Lax는 크로스 도메인이라도 GET 요청인 경우 쿠키를 전송할 수 있게 한다. Strict는 자기 자신에서 발생한 요청인 경우에만 쿠키를 전송할 수 있게 한다. None은 모든 크로스 도메인 요청에서 쿠키를 전송할 수 있게 한다. 이 속성은 종종 CSRF 공격의 완화 수단으로 사용되기도 한다.
Set-Cookie: Cookie-name=Some-value; **SameSite=Strict;**
- 아래와 같이 여러 개의 속성을 나열하여 함께 사용할 수도 있다.
Set-Cookie: Cookie-name=Some-value; **expires=Fri, 09-Mar-2024 05:56:24 GMT; Max-Age=1200;
Domain=example.com; Path=/bbc; Secure; HttpOnly; SameSite=Lax;**
Session ?
쿠키에는 임의의 사용자가 쿠키를 조작하여 다른 사용자 행세를 할 수 있다는 보안상 치명적인 문제가 있다. 세션은 이러한 쿠키의 문제점을 방지하기 위해 사용된다.
세션은 일정 시간 동안 사용자와 웹 서버간의 연결을 유지해주는 기술입니다. 세션을 통해 웹사이트는 사용자 활동에 따른 상태 데이터를 기억할 수 있습니다. 세션은 상태 데이터를 저장하고 추적할 수 있다는 면에서 봤을 때 쿠키와 비슷하지만 쿠키는 클라이언트측에 저장되는 반면 세션은 서버측에 저장되고 관리된다는 큰 차이가 있습니다.
Session의 상태 관리
서버가 세션을 통해 상태 정보를 유지하기 위해서 사용할 수 있는 기술은 다음과 같습니다.
- 쿠키(Cookie): 대부분의 웹사이트는 세션 토큰을 저장하기 위해 쿠키를 사용합니다. 앞서 살펴본 쿠키의 속성을 사용하게 되면 다른 방법에 비해 상대적으로 안전한 구현이 가능합니다. 서버는 클라이언트가 매 요청마다 Cookie 요청 헤더를 통해 전송하는 세션 토큰을 통해 세션 상태를 유지할 수 있습니다.
- 숨겨진 Form(폼) 필드: 서버는 클라이언트에게 전송될 HTML 폼의 숨겨진 필드에 세션 토큰을 동적으로 포함시킵니다. 클라이언트가 다시 폼을 제출할 때 다시 서버로 전송됩니다.
- URL 재작성(rewrite): 클라이언트로 부터 요청되는 URL에 고유한 세션 토큰을 동적으로 포함시킵니다. 웹사이트에 포함된 모든 a태그의 href나 form 태그의 action 속성에 들어갈 URL에 고유한 세션 토큰을 포함시켜야 합니다.
'보안 관제 관련 > 네트워크' 카테고리의 다른 글
프록시(Proxy)란?/프록시의 종류(Forward Proxy, Reverse Proxy) (0) | 2023.05.15 |
---|---|
Firewall(방화벽), IDS(침입 탐지 시스템), IPS (침입 방지 시스템),DDOS(분산 서비스 거부 공격) (2) | 2022.10.30 |
주요 프로토콜 (0) | 2022.10.29 |
OSI 7 Layer 의 각 계층별 장비 (0) | 2022.10.22 |
TCP 의 연결 / 연결 해제 방식 ( 3-Way HandShaking , 4-Way HandShaking ) (0) | 2022.10.22 |