본문 바로가기
부트캠프교육중/HTTP, 네트워크

Cookie

by 뭉지야 2023. 3. 9.
728x90

Cookie
-어떤 웹사이트에 들어갔을때, 서버가 일방적으로 클라이언트에 전달하는 작은 데이터
-서버가 웹 브라우저에 정보를 저장하고 불러올수있는 수단
-해당 도메인에 대해 쿠키가 존재하면, 웹 브라우저는 도메인에게 http 요청시 쿠키를 함께 전달.
-쿠키는 일반적으로 클라이언트의 브라우저에 저장이된다.
-쿠키에는 민감한 정보나 개인정보는 담지 않는 것이 좋다.
-서버에서 클라이언트에 영속성있는 데이터를 저장하는 방법이다.(서버는 클라이언트의 쿠키를 이용하여 데이터를 가져올수있다.)
-쿠키를 이용하는것은 단순히 서버에서 클라이언트에 쿠키를 전송하는 것만 의미하지 않고, 클라이언트에서 서버로 쿠키를 다시 전송하는 것도 포함된다.
-데이터를 저장한 이후 아무때나 데이터를 가져올수는 없다. 데이터를 저장한 이후 쿠키옵션같은 특정 조건들이 만족되어야 다시 가져올수있다.

#쿠키 이용법
-사용자 선호, 테마 등 장시간 보존해야하는 정보 저장에 적합.

 

'Set-Cookie':[
   'cookie=yummy', 
   'Secure=Secure; Secure',
   'HttpOnly=HttpOnly; HttpOnly',
   'Path=Path; Path=/cookie',
   'Doamin=Domain; Domain=codestates.com'
     ]

#쿠키 옵션 간단하게 살펴보기!

-Domain : 서버와 요청의 도메인이 일치하는 경우 쿠키 전송.

-Path : 서버와 요청의 세부경로가 일치하는 경우 쿠키 전송.

-MaxAge or Expires : 쿠키의 유효기간 설정.

-HttpOnly : 스크립트의 쿠키 접근 가능 여부 결정.

-Secure : HTTPS 프로토콜에서만 쿠키 전송 여부 결정.

-SameSite : CORS 요청의 경우 옵션 및 메서드에 따라 쿠키 전송 여부 결정.



#쿠키 옵션 종류
1. Domain 
- 서버와 요청의 도메인이 일치하는 경우 쿠키 전송
-쿠키 옵션에서 도메인은 포트 및 서브 도메인정보, 세부 경로를 포함하지 않는다. (서브도메인이란 www 같은 도메인 앞에 추가로 작성되는 부분을 말한다.)
-쿠키 옵션에서 도메인 정보가 존재한다면 클라이언트에서는 쿠키의 도메인 옵션과 서버의 도메인이 일치해야만 쿠키를 전송할수있다. (naver.com에서 받은 쿠키를 google.com에 전송하는 일을 막을수있다.)

2. path
- 서버와 요청의 세부 경로가 일치하는 경우 쿠키 전송
-path: 세부 경로로써 서버가 라우팅할때 사용하는 경로를 의미.
-설정된 경로를 포함하는 하위 경로로 요청을 하더라도 쿠키를 서버에 전송할수있다. 
(path가 /uers로 설정되어 있고, 요청하는 세부 경로가 /users/naver 인 경우라면 쿠키 전송이 가능하다.)

3. MaxAge or Expires
- 쿠키의 유효기간 설정 (일정시간후 쿠키 자동 소멸)
- MaxAge:쿠키가 유효한 시간을 초 단위로 설정하는 옵션
- Expire: maxage와 비슷하지만, 언제까지 쿠키가 유효한지 심판의 날을 지정할수있다. 이때 옵션의 값은 클라이언트의 시간을 기준으로 한다. 이후 지정된 시간, 날짜를 초과하게 되면 쿠키는 자동으로 파괴된다.
-세션 쿠키: maxage 또는 expires 옵션이 없는 쿠키로, 브라우저가 실행중일때 사용할수있는 임시 쿠키이다. 브라우저를 종료하면 해당 쿠키는 삭제된다.
-영속성 쿠키: 브라우저의 종료 여부와 상관없이 maxage 또는 expires에 지정된 유효시간만큼 사용가능한 쿠키이다.

4. HttpOnly
- 자바스크립트의 쿠키 접근 가능 여부 결정 (쿠키의 접근을 막고, 브라우저만 접근할수있게한다)
-옵션이 true로 설정된경우, 자바스크립트로 쿠키에 접근이 불가하다.
-옵션을 명시하지 않는 경우에는 기본적으로 false로 지정된다. (만약 false인 경우 document.cookie를 이용해 자바스크립트로 쿠키에 접근할수있으므로 쿠키가 탈취될 위험이 있다.)
-쿠키는 <script> 태그로 접근가능. 그래서 XSS공격에 취약
-그래서 httpOnly를 쓰면 script태그로 접근못하게 보안강화할수있다.

5. Secure
-사용하는 프로토콜에 따른 쿠키의 전송 여부를 결정하는 옵션이다.
-secure옵션이 true로 설정된 경우 (HTTPS를 이용하는 경우에만) 쿠키를 전송할수있다.
-secure옵션이 없다면 프로토콜에 상관없이 http, https에 모두 쿠키를 전송할수있다.
-도메인이 localhost인 경우에는 https가 아니여도 쿠키 전송이 가능하다. 

6. SameSite
- CORS 요청의 경우 해당 옵션 및 요청에서 사용한 메서드(get, post 등)에 따라 쿠키 전송 여부 결정하게된다.
-CSRF공격을 막는데 매우 효과적이다.(해커가 스팸메일로 해킹하는식의 방법)
-Lax: Cross-Origin 요청이라면 GET메소드에 대해서만 쿠키를 전송할수있다.
-Strict: 단어 그대로 가장 엄격한 옵션으로, Cross-Origin이 아닌 same-site인 경우에만 쿠키를 전송할수있다.
-None: Cross-Origin에 대해 가장 관대한 옵션으로 항상 쿠키를 보내줄수있다. 다만 쿠키 옵션중 Secure옵션이 필요하다.
-이때 same-site는 요청을 보낸 Origin과 서버의 도메인, 프로토콜, 포트가 같은 경우를 말한다. 이중 하나라도 다르면 Cross-Origin으로 구분된다.



#쿠키 옵션들을 지정한 다음 서버에서 클라이언트로 쿠키를 처음 전송하게 된다면 헤더에  Set-Cookie라는 프로퍼티로 쿠키를 담아 전송한다.
이후 클라이언트에서 서버에게 쿠키를 전송해야 한다면 클라이언트는 헤더에 cookie라는 프로퍼티에 쿠키를 담아 서버에 쿠키를 전송하게 된다.

#쿠키를 이용한 상태 유지
-서버는 클라이언트에 인증정보를 담은 쿠키를 전송하고, 클라이언트는 전달받은 쿠키를 서버에 요청과 함께 전송하여 stateless한 인터넷 연결을 stateful하게 유지할수있다.
-BUT!!!!! 기본적으로 쿠키는 오랜시간 동안 유지될수있고 HttpOnly 옵션을 사용하지 않았다면 자바스크립트를 이용해서 쿠키에 접근할수있기 때문에 쿠키에 민감한 정보를 담는 것은 위험하다.

728x90

'부트캠프교육중 > HTTP, 네트워크' 카테고리의 다른 글

해싱 Hashing  (0) 2023.03.09
Session  (0) 2023.03.09
TCP/IP 4계층 모델  (0) 2023.03.09
HTTP의 특징  (0) 2023.03.09
OSI 7계층 모델  (0) 2023.03.09