20240513 HTTP (8) - 헤더( 쿠키 )

2024. 5. 13. 10:08HTTP

Set-Cookie: 서버에서 클라이언트로 쿠키 전달받고 응답받는다.

Cookie: 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청 받을 서버로 전달받는다.

 

쿠키를 미사용한 상태라면,, 로그인을 하고 어떤 페이지를 들어가도 로그인을 안한 자와 구분이 되지 않는다.

이 대안으로는.

모든 요청에 사용자 정보를 포함해서 보낸다면?

모든 요청과 링크에 사용자 정보 포함되도록 개발을 매번 해야하므로 번거로우며,, 브라우저를 완전히 종료하고 다시 열면 또 다시 보내야하는 문제가 있을 수 있다..

 

그래서 해결하기 위해 도입된 게 쿠키다!

 

로그인을 하면 ME라는 셋 쿠키에 쿠키 헤더를 만들어 보낸다. 그럼 웹 브라우저의 쿠키 저장소에 USER는 ME라는 정보가 저장된다.  자동으로 웹 브라우저에서 요청이 보내질 때마다 해당되는 쿠키를 찾아서 헤더를 만들고 다시 보낸다! 그럼 서버에서는 ME라는 것을 알 수 있다.

 

쿠키는 모든 요청에 쿠키 정보를 자동적으로 포함시키게 한다.

 

하지만 모든 정보에 쿠키를 담게 된다면 보안적인 문제나 여러 문제가 발생할 수 있으므로 이를 제한하는 부분도 있다.

 

ex) set-cookie:sessionId=abcde1234;expires=Sat,26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure

  • 사용처
    • 사용자 로그인 세션 관리
    • 광고 정보 트래킹
  • 쿠키 정보는 항상 서버에 전송된다.
    • 네트워크 트래픽을 추가적으로 유발할 수 있다.
    • 최소한의 정보만 사용해야 한다. ex) 세션 id, 인증 토큰
    • 만약에 서버에 전송하지 않고 웹 브라우저 내부에 데이터를 저장하고 싶으면 웹 스토리지(localStorage, sessionStorage)를 참고하면 된다. 단, 보안에 민간함 데이터인 주민번호나 신용카드 등등의 경우 저장하면 안 된다. 

 

 

쿠키의 생명주기

- set-cookie: expires=Sat,26-Dec-2020 00:00:00 GMT; 

만료일이 되면 쿠키가 삭제된다.

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

0이나 음수를 지정하면 쿠키 삭제된다.

  • 세션 쿠키: 만료 날짜를 생략하면 브라우저 종료될 때까지만 유지된다.
  • 영속 쿠키: 만료 날자를 입력하면 해당 날짜까지만 유지된다.

 

쿠키의 도메인

쿠키는 도메인을 지정해서 저장할 수 있다.

ex) domain=example.org

- 명시한 경우

  • domain=example.org를 지정해서 쿠키를 생성하면 example.org는 물론이고 dev.example.org도 쿠키를 접근할 수 있다.

- 생략한 경우

  • 현재 문서 기준 도메인만 적용된다.
  • example.org에서 쿠키를 생성하고 domain지정을 생략할 경우 example.org에서만 쿠키가 접근이 가능하고 위와는 다르게 dev.example.org는 쿠키가 접근되지 않는다.

 

 

쿠키의 경로

ex) path=/home

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

일반적으로 path=/루트로 지정된다.

그럼 예를 들면 path=/home으로 지정했을 경우,

/home, /home/level1,/home/level1/level2는 모두 가능하지만 /hello 는 불가능하다.

 

 

쿠키의 보안

- Secure

  • 원래는 쿠키는 http,https를 구분하지 않고 전송하지만 Secure를 적용하면 https인 경우에만 전송된다.

- HttpOnly

  • XSS(XSS: Cross-Site Scripting) 공격을 방지한다.
  • 자바스크립트에서는 접근이 불가하고 (document.cookie) HTTP 전송에만 사용한다.

- SameSite

  • XSRF(CSRF: Cross-Site Request Forgery: ) 공격을 방지한다.
  • 요청 도메인과 쿠키에 설정된 도메인이 같은 경우에만 쿠키를 전송한다.

 

참고

XSS(XSS: Cross-Site Scripting) 

웹사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점

 

XSRF(CSRF: Cross-Site Request Forgery )  

용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격