본문 바로가기
네트워크

쿠키(Cookie)

by 어쩌다개발 2022. 4. 1.
반응형

쿠키(Cookie)

- Set-Cookie : 서버에서 클라이언트로 쿠키 전달(응답)
- Cookie : 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달

HTTP는 무상태(Stateless) 프로토콜이기 때문에, 클라이언트와 서버가 요청과 응답을 주고 받으면 연결이 끊어진다.
즉, 클라이언트가 다시 요청하면 서버는 이전 요청을 기억하지 못하고 클라이언트와 서버는 서로 상태를 유지하지 않는다.

ex. 로그인 이후 첫 페이지는 '홍길동'님, 안녕하세요.를 보여줄 수 있지만 그 이후 페이지에서는 연결이 끊어져서 '비회원'님, 안녕하세요.를 표시하게 된다.

이 때, 대안으로 모든 요청과 링크에 '홍길동'의 정보를 포함시켜서 '홍길동'님, 안녕하세요.를 표시할 수 있겠지만 그렇게되면 모든 요청에 사용자 정보가 포함되도록 개발해야 되는 문제점과 브라우저를 종료 후 다시 열면 다시 연결이 끊기게 된다.

쿠키 저장소를 이용하면 로그인 시 유저 정보 '홍길동'을 저장하여 모든 요청과 링크에서 쿠키 저장소에 저장 된 유저 정보를 들고와서 보여줄 수 있다.

ex. set-cookie : sessinId-abcde 1234; expires=Set, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure

쿠키 사용처

- 사용자 로그인 세션 관리
- 광고 정보 트래킹

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

- 네트워크 트래픽 추가 유발
- 최소한의 정보만 사용(세션 id, 인증 토큰)
- 서버에 전송하지 않고, 웹 브라우저 내부에 데이터를 저장하고 싶으면 웹 스토리지 (loclaStorage, sessionStorage) 참고
* 보안에 민감한 데이터는 저장하면 안 됨 ex. 주민번호, 신용카드 번호 등

쿠키 - 생명주기(Expires, max-age)

- Set-Cookie : expires=Sat, 26-Dec-2020 04:39:21 GMT : 만료일이 되면 쿠키 삭제
- Set-Cookie : max-age=3600 (3600초) : 0이나 음수를 지정하면 쿠키 삭제
- 세션 쿠키 : 만료 날짜를 생략하면 브라우저 종료시까지만 유지
- 영속 쿠키 : 만료 날짜를 입력하면 해당 날짜까지 유지

쿠키 - 도메인(Domain)

- ex) domain= naver.com
- 명시 : 명시한 문서 기준 도메인 + 서브 도메인 포함
ex. domain=naver.com를 지정해서 쿠키를 생성하면, naver.com은 물론이고 서브도메인 (webtoon.naver.com, mail.naver.com 등) 까지 쿠키 접근이 가능
- 생략 : 현재 문서 기준 도메인만 적용
ex. naver.com에서 쿠키를 생성하고 domain 지정을 생략하는 경우 naver.com에서만 쿠키에 접근할 수 있고, 서브도메인에서는 쿠키에 접근할 수 없음.

쿠키 - 경로(Path)

-ex) path=/home
- 명시한 경로를 포함한 하위 경로 페이지만 쿠키 접근 가능
- 일반적으로 path=/ 루트로 지정
ex. path=/home 지정 시
/home > 가능
/home/level1 > 가능
/home/level1/level2 > 가능
/hello > 불가능

쿠키 - 보안(Secure, HttpOnly, SameSite)

- Secure : 쿠키는 Http, Https를 구분하지 않고 전송하나, Secure를 적용하면 Https인 경우에만 전송 가능함.
- HttpOnly : XSS 공격 방지, 자바스크립트에서 접근 불가(document.cookie), Http 전송에만 사용 가능
- SameSite : XSRF 공격 방지, 요청 도메인과 쿠키에 설정된 도메인이 같은 경우만 쿠키 전송

XSS : 크로스 사이트 스크립팅(Cross Site ScriptingXSS)은 공격자가 상대방의 브라우저에 스크립트가 실행되도록 해 사용자의 세션을 가로채거나, 웹사이트를 변조하거나, 악의적 콘텐츠를 삽입하거나, 피싱 공격을 진행하는 것
XSRF :
XSRF 라고도 하고, CSRF 라고도 한다. 쿠키만으로 인증하는 서비스의 취약점을 이용해, 사용자가 모르게 해당 서비스에 특정 명령을 요청하는 공격

참고 : https://inf.run/Szwv

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., - 강의 소개 | 인프런...

www.inflearn.com

 

반응형

'네트워크' 카테고리의 다른 글

캐시(Cache)  (0) 2022.04.01
HTTP 헤더, HTTP 바디  (0) 2022.03.31
HTTP 상태코드  (0) 2022.03.28
HTTP API 설계  (0) 2022.03.28
HTTP 메서드 활용  (0) 2022.03.28

댓글