100%를 한번에 바꾸는건 어려워도 1%를 100번 바꾸는건 쉽다.

생각정리 자세히보기

개발/Node.js(Express)

[Node.js] Cookie 공부

dc-choi 2022. 1. 7. 18:04
반응형

프로젝트를 하면서 인증에 관련된 부분을 진행하면서 지식의 부족함을 느꼈다.

그래서 생활코딩의 강의를 참고해서 공부를 진행하였다, 추후에 더 공부를 해야할 것 같다.

예제 코드

var http = require('http'); // 서버 모듈
var cookie = require('cookie'); // cookie를 파싱하는 모듈

http.createServer(function(req, res){
  var cookies = {}; // 쿠키를 담을 객체
  if (req.headers.cookie !== undefined) { // 쿠키 예외처리
    cookies = cookie.parse(req.headers.cookie); // 객체에 헤더안의 쿠키를 파싱
  }
  res.writeHead(200, {
    'Set-cookie': [ // 쿠키 응답
      'qwer=qwer',
      'zxcv=zxcv',
      `EX=EX; Max-Age=${60*60*24*30}`, // 한달동안 남아있는 쿠키
      'se=se; Secure', // https에서만 주고받는 쿠키
      'web=web; HttpOnly', // 클라이언트단에서 조작 불가한 쿠키
      'p=p; path=/cookie', // 쿠키의 유효 경로 설정
      'd=d; Domain=o2.org', // 쿠키의 유효 도메인 설정
    ]
  });
  res.end('Cookie!!');
}).listen(3000);

쿠키란?

사용자의 개인화를 위해서 웹 브라우저상에 key=value 형태로 정보를 저장하는 것.

쿠키의 생성

쿠키를 생성할때는 응답에 Set-cookie: ['key'='value'] 형태로 선언해야 한다.

쿠키 읽기

쿠키가 만약 생성이 되어있다면, 요청 헤더에 쿠키가 들어가있다.
요청 헤더의 쿠키는 문자열로 들어온다.
객체 형태로 파싱을 하기 위해서는 cookie모듈의 parse()를 사용해야한다.

쿠키의 활용

쿠키의 값은 웹 브라우저상에 존재한다.
쿠키가 유출되면 보안상 굉장히 위험하다.

session 쿠키 VS Permanent 쿠키

session 쿠키 : 웹 브라우저를 끄면 사라지는 휘발성 쿠키
Permanent 쿠키 : 브라우저를 꺼도 사라지지 않는 쿠키 (대신 만료기한이 있다.)


Permanent 쿠키는 Expires와 Max-age로 설정 할 수 있다.
Expires : 언제까지 유효한가
Max-age : 현재 시간을 기준으로 유효한 기간을 정함. (초단위)

Secure && HttpOnly

Secure : https를 사용하는 경우만 웹 브라우저가 쿠키를 서버로 전송하는 옵션
HttpOnly : JS의 document.cookie를 이용해서 쿠키에 접속하는 것을 막는 옵션

path && Domain

path : 쿠키가 유효한 경로를 지정
Domain : 쿠키가 지정해준 도메인에서도 살아있을 수 있다.

인증 기능 구현

로그인 : 쿠키값을 이용해서 각 페이지가 실행될때마다 로그인을 확인한다.
로그아웃 : 쿠키의 수명을 없애서 로그아웃을 시킨다.

수업을 마치며

쿠키는 클라이언트단에서 저장되어있기 때문에 중요한 정보는 세션에 저장해야한다.
세션은 서버에 저장되기 때문에 보안상 더 유리하다. 대부분 세션을 사용한다고 한다.


브라우저에 정보를 저장하는 방식이 더 많이 있다.
쿠키는 4KB밖에 저장할 수 없다. localStorage, Indexed DB는 더 많이 저장할 수 있다.


정보를 평문으로 저장하는것은 보안적으로 매우 위험하다.
hash, salt등 다양한 암호화 방식에 대해 공부하고, PBKDF2, bcrypt같은 라이브러리 공부할것.

반응형