내가 한 노력들

[ 쿠키 ] 생명주기 / 세션쿠키 / 영속쿠키 / 도메인 / 보안 본문

IT 공부/Network

[ 쿠키 ] 생명주기 / 세션쿠키 / 영속쿠키 / 도메인 / 보안

JONGI-N CHOI 2023. 2. 19. 00:28

쿠키

Set-Cookie

서버에서 클라이언트 쿠키 전달(응답)

 

ex) set-cookie: sessionId=asdasd124; expires=날짜; path=/; domain=.google.com;Secure

 

로그인 과정

 

1. 클라이언트 From을 통해 로그인

POST /login HTTP/1.1
Host: ...

user=jongin

2. 서버, DB에서 유저 확인후 응답

HTTP/1.1 200 OK
Set-Cookie: user=jongin

jongin님 안녕하세요~!

Set-Cookie에 user의 정보를 함께 보냄

 

3. 웹브라우저 쿠키 저장

웹브라우저에는 쿠키를 저장할 수 있는 공간이 있어서, 그 곳에 쿠키 저장 

 

4. 또 다른 요청 

GET /welcome HTTP/1.1
Cookie: user=jongin

쿠키가 웹 브라우저에 저장된 이후에는 요청을 보낼 때 마다, cookie 값을 넣어서 요청을 보냄 

 

Cookie

클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP요청시 서버로 전달

 

활용 

- 사용자 로그인 세션 관리

- 광고 정보 트래킹

 

쿠키 정보는 항상 서버에 전송됨 

 - 웹브라우저에 쿠키가 존재하면 서버에 요청할 때마다, 쿠키도 같이 보냄 -> 추가 트래픽 발생 

 - 최소한의 정보만을 사용 (세션 id, 인증 토큰)

 - 서버에 전송하지 않고, 웹 브라우저 내부에 데이터를 저장하고 싶으면 웹 스토리지(localStorage, sessionStorage)참고

 

Cookie에는 보안에 민감한 정보를 저장하면 안됨 

 

 

쿠키 - 생명주기 

set-Cookie: expires = 날짜 (GMT)

 - 만료일 되면 쿠키 삭제

 

set-Cookie: max-age=3600 (초)

 - 3600초가 지나면 쿠키 삭제 ( 0이나 음수이면 쿠키 삭제)

 

세션 쿠키 

만료 날짜를 생략하면, 브라우저 종료시 까지만 유지

영속 쿠키

만료 날짜를 입력하면 해당 날짜까지 유지 

 

쿠키 - 도메인

domain=google.com 

 

domain을 명시한 경우

- 명시한 domain은 물론이고, 서브 도메인에서도 쿠키 접근 가능

 

domain을 명시안한 경우

- 현재 문서 기준에서만 쿠키 접근가능

 

쿠키 - 경로

path=/home

이 경로를 포함한 하위 경로 페이지만 쿠키 접근 

일반적으로 "path=/"로 지정 ( 해당 도메인에서는 모든 곳에서 쿠키를 사용하게 하고 싶으니까)

 

쿠키 - 보안

Secure

Secure 생략시

쿠키 http, https를 구분하지 않고 전송

Secure 명시시

https인 경우에만 전송

 

HttpOnly

- XSS 공격방지

- 자바스크립트에서 접근 불가

- HTTP전송에서만 사용

 

SameSite

- XSRF공격 방지

- 요청 도메인과 쿠키에 설정된 도메인이 같은 경우에만 쿠키 전송