HTTP - 쿠키

meluu_·2023년 8월 11일
0

HTTP

목록 보기
7/8
post-thumbnail

- 시작하기 앞서 -

필자는 쿠키에 대해서 어렸을 적부터 궁금증이 있었고 쿠키 삭제 라는 게 뭐길래 뭔가 안될때(잘 기억이 안나지만 아마 로그인 문제일거 같다.) 삭제하면 해결됐을까? 라는 의문이 있기도 했었다. 제일 흥미로운 파트이기도 하다. 왜 쿠키 라고 부를까?


🍪 쿠키


'쿠키' 의 어원

루 몬툴리 라는 웹 프로그래머가 만들었다. 유닉스에서 프로그램이 수신 한 그대로(변환X) 반환하는 데이터 패킷을 의미하는 매직 쿠키라는 용어에서 비롯되었다.



✖️ 쿠키 미사용시


HTTP는 무상태 프로토콜 이기에
서버는 클라이언트의 요청 응답 후 이전 요청을 기억하지 않는다.

대안 : 모든 요청에 사용자 정보를 포함
➡️ 이것은 개발의 어려움과 브라우저의 재 시작 시 세션 유지 문제등이 있다.

이 문제를 해결하기 위해 쿠키가 등장했다.



🍪 쿠키 정보


Set-Cookie : 서버에서 클라이언트로 쿠키 전달(응답)
Cookie     : 클라이언트가 서버에서 받은 쿠키를 저장, HTTP 요청시 서버로 전달
// 쿠키 예시
SIDCC=LGoEy2_QWEsabc(...); expires=Sat, 10-Aug-2024 00:00:00 GMT; 
path=/; domain=.google.com; priority=high; Secure

// 해당 정보는  크롬 브라우저 f12로 확인한 내용
  • 사용처

    • 사용자 로그인 세션 관리
    • 광고 정보 트래킹
  • 쿠키 정보는 항상 서버에 전송됨

    • 네트워크 트래픽 추가 유발
    • 최소한의 정보만 사용(세션 id, 인증 토큰)
    • 서버에 전송하지 않고, 웹 브라우저 내부에 데이터를 저장하고 싶으면 웹 스토리지
  • 주의!

    • 보안에 민감한 데이터는 저장하면 안됨

✅ login

  1. 웹 브라우저에서 login 요청을 보내면 서버는 해당 정보를 담은 Set-Cookie 를 만들어서 응답한다.
  2. 웹 브라우저는 쿠키 저장소에 쿠키를 저장
  3. 로그인 이후 welecome 페이지 접근 시 웹 브라우저는 쿠키 저장소의 쿠키를 가지고와서 요청에 Cookie값을 넘긴다.

모든 요청에 쿠키 정보를 자동 포함


☘️ 생명주기 (Expires, max-age)


// 만료일이 되면 쿠키 삭제
Set-Cookie: expires=Sat, 10-Aug-2024 00:00:00 GMT; 

// 0이나 음수를 지정하면 쿠키 삭제
Set-Cookie: max-age=3600   // (3600초)

세션 쿠키: 만료 날짜를 생략시 브라우저 종료시 까지만 유지
영속 쿠키: 만료 날짜를 입력시 해당 날짜까지 유지


📄 도메인 (Domain)


domain=example.org;

명시 : 명시한 문서 기준 도메인 + 서브 도메인 포함

  • domain=example.org를 지정해서 쿠키 생성
    • example.org를 물론이고
    • dev.example.org도 쿠키 접근

생략 : 현재 문서 기준 도메인만 적용

  • example.org 에서 쿠키를 생성하고 domain 지정을 생략
    • example.org 에서만 쿠키 접근
    • dev.example.org는 쿠키 미접근

✔️ '.' 은 뭘까?

domain=.google.com;

위에서 쿠키예시로 든 구글 쿠키 정보중 도메인이 .google.com으로 되어있다. 검색해서 찾아보니 .서브 도메인으로 명확한 지정이였다.

  • ex) mail.google.com에도 쿠키 접근



💠 경로 (Path)


path=/;
  • 이 경로를 포함한 하위 경로 페이지만 쿠키 접근
  • 일반적으로 path=/ 루트로 지정
  • 예)
    • path-/home 지정
      -/home -> 가능
      -/home/ch1 -> 가능
      -/event -> 불가능


🔒 보안 (Secure, HttpOnly, SameSite)


  • Secure

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

    • XSS 공격 방지
    • 자바스크립트에서 접근 불가 (document.cookie)
    • HTTP 전송에만 사용
  • SameSite

    • XSRF 공격 방지
    • 요청 도메인과 쿠키에 설정된 도메인이 같은 경우만 쿠키 전송


🔖 참고) XXS, XSRF?

XXS : 사이트 간 스크립팅, 크로스 사이트 스크립팅

  • 웹 사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점
    • 웹 애플리케이션이 사용자로부터 입력 받은 값을 제대로 검사하지 않고 사용할 경우 나타남
    • 해커가 사용자의 정보(쿠키, 세션 등)을 탈취, 자동으로 비정상적인 기능을 수행하게 할 수 있다.

XSRF : 사이트 간 요청 위조, 크로스 사이트 요청 위조

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


📖 출처 및 참고자료

모든 개발자를 위한 HTTP 웹 기본 지식

Http 아이콘 제작자: Freepik - Flaticon

위키백과

profile
열심히 살자

0개의 댓글