티스토리 뷰

Development/Network

[Network]쿠키(Cookie)

Vagabund.Gni 2022. 9. 20. 20:10
728x90
반응형

이전 글에서 HTTP의 특징인 비연결성무상태성을 보완하기 위해 쿠키와 세션이 도입되었다고 했었다.

 

잠깐 복습하자면 HTTP는 위와 같은 특성을 가지기 때문에 서버는 클라이언트를 매번 확인해야 한다.

 

페이지를 이동할 때마다 로그인을 새로 해주어야 한다는 의미이다.

 

  • Connectionless - 클라이언트가 요청을 한 후 응답을 받으면 서버가 그 연결을 끊어 버리는 특성
  • Stateless - 연결을 끊는 순간 클라이언트와 서버의 통신이 끝나며, 상태 정보를 유지하지 않는 특성

 

2022.08.03 - [Development/Network] - [네트워크]웹(WEB)

2022.08.04 - [Development/Network] - [네트워크]HTTP

 

[네트워크]HTTP

HTTP(HyperText Transfer Protocol)는 하이퍼텍스트를 빠르게 교환하기 위한 프로토콜의 일종으로, 클라이언트와 서버가 어떻게 메시지를 교환할지를 정해 놓은 규칙이다. 프로토콜의 일종이라 함은

gnidinger.tistory.com

  쿠키 세션
저장 위치 클라이언트 로컬 서버 자원 사용
보안 취약(연결성 > 안정성) 우수(안정성 > 연결성)
속도 빠름 중간
수명 브라우저 종료시에도 남음 브라우저 종료와 함께 삭제
사용 예시 사이트 아이디/비밀번호 저장
쇼핑몰 장바구니
로그인 등 보안상 중요한 작업

이번 글에선 먼저 쿠키에 대해 조금 더 알아본다.

 

Cookie

 

쿠키, 혹은 HTTP 쿠키는 웹 서버에 의해 생성되는 데이터 패킷으로, 클라이언트의 기기에 저장된다.

 

조금 풀어서 말하자면 바로 삭제되지 않는 특성을 이용해 서버가 인증정보를 쿠키에 담아 클라이언트에게 전송하고

 

클라이언트는 전달받은 쿠키를 요청과 함께 전송하여 무상태성(Stateless)을 극복하고 연결 상태를 유지(Stateful)한다.

 

하지만 이처럼 안정성보다 연결성을 우선으로 하기 때문에 보안이 취약하다.

 

또한 일종의 기록 파일이기 때문에 같은 웹 사이트에서도 사용자의 활동에 따라 수시로 변경되고 갱신되며

 

서버의 필요에 따라 클라이언트에서 쿠키를 불러오기도 한다.

 

참고로 서버에서 클라이언트로 처음 쿠키를 전송할 땐 헤더의 'Set-Cookie'프로퍼티에 쿠키를 담아 보내며

 

이후 클라이언트에서 서버 쪽으로 쿠키를 전송할 땐 'Cookie'프로퍼티에 쿠키를 담아 전송한다. 

 

이때 클라이언트와 서버는 쿠키를 다시 가져갈 수 있는 조건을 지정할 수 있는데, 이를 쿠키 옵션이라고 한다.

 

이어서 주로 사용되는 쿠키 옵션에 대해 알아보자.

 

Domain

 

전에 URL과 URI에 대한 글에서 도메인에 대해 알아본 적이 있다.

 

2022.08.02 - [Development/Network] - [네트워크]URL, URI, Domain, DNS

 

[네트워크]URL, URI, Domain, DNS

URL(Uniform Resource Locator)은 네트워크 상에서 자원의 위치를 말한다. 쉽게 말해 웹 상의 동영상이나 이미지, 게시글의 주소라고 할 수 있다. URL은 Scheme(Protocol), Host, Port, Url-Path로 구분할 수 있..

gnidinger.tistory.com

URI에서 도메인이란 위 그림과 같이 www.pinterest.com과 같은 기억하기 쉬운 이름을 말한다.

 

쿠키 옵션에서 도메인이란 이 도메인 중 서브 도메인을 제외한 부분, 즉 pinterest.com을 가리키게 된다.

 

만약 쿠키 옵션에 도메인 정보가 존재한다면 쿠키의 옵션과 서버의 도메인이 일치하는 경우에만 쿠키를 전송할 수 있다.

 

Path

 

Path는 위에 표시한 것처럼 리소스까지의 세부 경로를 가리킨다(/pin/776167317048025709).

 

명시하지 않는다면 기본으로 / 이 설정되어 있다.

 

Path 옵션의 특징은 설정된 Path를 모두 만족하기만 한다면 뒤에 추가 경로가 존재하더라도 쿠키를 전송할 수 있다는 것이다.

 

예를 들면 "/pin/776167317048025709/rx93"과 같이 추가 경로가 있어도 쿠키를 보낼 수 있다는 뜻이다.

 

MaxAge / Expires

 

쿠키의 유효기간을 정하는 옵션이다.

 

MaxAge는 쿠키의 수명을 초 단위로 설정하며 Expires시간과 날짜 단위로 지정한다.

 

또한 이렇게 수명이 지정된 쿠키영속성 쿠키(Persistence Cookie)라 부르며

 

수명이 지정되지 않아 브라우저 종료와 함께 삭제되는 쿠키세션 쿠키(Session Cookie)라 부른다.

 

Secure

 

쿠키 전송 시 사용하는 프로토콜을 설정한다.

 

해당 옵션이 'true'일 경우 HTTPS를 이용하는 경우에만 쿠키를 전송할 수 있다.

 

Secure 옵션이 지정되어있지 않다면 프로토콜에 상관없이 쿠키를 전송할 수 있다.

 

HttpOnly

 

자바스크립트의 쿠키 접근 여부를 결정한다.

 

'true'인 경우 자바스크립트는 쿠키에 접근이 불가능하며

 

명시되지 않는 경우 기본으로 'false'가 지정되어 있어 XSS 공격에 취약하다.

 

Samesite

 

교차 출처 요청(Cross-Origin Request)을 받은 경우의 쿠키 전송 여부를 결정한다.

 

여기서 Same-site란 클라이언트와 서버의 프로토콜, 도메인, 포트가 같은 경우를 말한다.

 

  • Lax - Cross-Origin Request일 때 'GET' 메서드에 대해서만 쿠키 전송 가능
  • Strict - Cross-Origin Request의 경우 쿠키 전송 불가
  • None - 항상 쿠키 전송 가능
반응형

'Development > Network' 카테고리의 다른 글

[Network]JWT(JSON Web Token)  (0) 2022.09.23
[Network]세션 기반 인증 vs. 토큰 기반 인증  (0) 2022.09.23
[Network]세션(Session)  (4) 2022.09.20
[Network]해싱(Hashing)  (1) 2022.09.20
[Network]TLS, HTTPS  (1) 2022.09.20
[네트워크]REST API  (1) 2022.08.04
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함