인증보안.. 쿠키.. 세션...

이정민·2022년 1월 27일
0

HTTP 프로토콜 환경은 "connectionless, stateless"하기 때문에 이를 보완하기 위해 쿠키와 세션이 필요

쿠키

서버로부터 쿠키가 오면 웹 브라우저(클라이언트)는 요청자를 추정할만한 정보로 쿠키를 저장해두었다가 다음에 클라이언트는 요청할 때 마다 쿠키를 동봉해서 서버에 보낸다.
서버는 요청에 들어있는 쿠키를 읽어서 사용자가 누구인지 파악한다.<= 개인정보 유출 방지를 위해서 주기적으로 삭제 권고

쿠키의 특징

  • 유효기간이 있다
  • 키-값의 쌍

쿠키는 요청의 헤더(cookie)에 담겨 전송
클라이언트는 응답의 헤더 (set-cookie)에 때라 쿠키를 저장합니다.

const http = require("http")
http.createServer((req, res)=>{
	//createServer 메소드의 콜백에서는 req 객체에 담겨 있는 쿠키를 가져온다. 
	console.log(req.url, req.headers.cookie);
 	   //cookie는 req.headers.cookie에 들어있다. // req.headers는 요청의 헤더 
    res.writeHead(200, {'Set-Cookie': 'mycookie = test'});
    	//writeHead 응답의 헤더에 쿠키를 기록하는 메소드 
        //Set-Cookie: 다음과 같은 값의 쿠키를 저장해라 
        //여기서는 mycookie = test라는 쿠키를 저장 
    res.end('Hello cookie');
    })
    .listen(8083,()=>{
    console.log(`8083 포트에서 서버 대기 중입니다.`);
    });

쿠키의 사용 예

로그인 시 "아이디와 비밀번호를 저장하시겠습니까?"
팝업에서 "오늘 더 이상 이 창을 보지 않음" 체크

세션

세션은 쿠키를 기반으로 하고 있지만 세션은 사용자 정보 파일을 서버에서 관리합니다.
서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지합니다.
물론 접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않게 설정이 가능 합니다.
사용자에 대한 정보를 서버에 두기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지하게 됩니다.
즉 동접자 수가 많은 웹 사이트인 경우 서버에 과부하를 주게 되므로 성능 저하의 요인이 됩니다.
클라이언트가 Request를 보내면, 해당 서버의 엔진이 클라이언트에게 유일한 ID를 부여하는 데 이것이 세션 ID입니다.

세션의 동작 방식


1) 클라이언트가 서버접속시 서버에서 session_id 발급
2) 클라이언트는 쿠키에 session_id 저장해서 가지고 있음
3) 클라리언트는 서버에 요청할 때, 이 쿠키의 session_id를 요청과 함께 전달
4) 서버는 session_id를 전달 받아서 세션에 있는 클라언트 정보를 가져와서 사용
5) 클라이언트 정보를 가지고 서버 요청을 처리하여 클라이언트에게 응답

세션의 특징

1) 클라이언트에게 고유의 session_id를 부여
2) session_id로 클라이언트를 구분 클라이언트에 맞는 정보를 제공
3) 보안 면에서 쿠키보다 우수
4) 사용자가 많아질수록 서버 메모리를 많이 차지하게 됨

세션의 사용 예

보안상 중요한 작업을 수행할 때 사용

세션이 쿠키보다 보안상 더 유리하지만 서버의 자원을 사용하기 때문에 수가 많아지면 서버의 메모리가 감당할 수 없고 속도가 느려질 수 있기 때문에 쿠키가 유리한 경우도 있다.

0개의 댓글