express로 Cookie 간단히 넣기

2020. 9. 13. 17:41Authentication

1. Cookie란?

Cookie는 클라이언트에 저장하는 작은 기록 정보라고 생각하면 된다. 4KB의 작은 크기이기에 대용량과 같은 기록보다는 방문기록 혹은 사용자가 사이트에서 사용 편의성을 위한 기록들을 저장할 때 쓰인다고 생각하면 된다. 

 

주의할 점은 개인정보와 같은 민감한 데이터 같은 것들은 쿠키로 사용하는 것을 추천하지 않는다. 왜냐하면 쿠키 자체만 사용하면 사용자의 기록 및 쿠키가 그대로 드러나기 때문에 주로 해싱(토큰)을 같이 쓴다.

 

express를 이용해 다음과 같이 사용할 수 있다.

const cookieParser = require('cookie-parser');
const express = require('express');
const app = express();
app.use(cookieParser());

app.get('/', function (req,res,next) {
    res.cookie('myname', 'KIM');
    res.send(req.cookies);
})

app.listen(3000, () => {
    console.log('listen!')
})

다음과 같이 작성하고 localhost:3000을 들어가 console창의 network를 살펴보면 Response-Header 창에 Set-Cookie에서 볼 수 있다.

res.send에 req.cookies를 넣은 것은 화면으로 바로 보기 위함이다.

 

그렇지만, 위에서 언급한 대로 내 이름이 바로 드러나 있다는 점에서 보안에 매우 취약하다는 것을 들 수 있다. 그래서 암호화 방법으로 Crypto를 같이 사용한다. Crypto는 NodeJS 내장 모듈로 암호화에 대한 모듈이다. Crypto안에 다양한 암호화 기능 중에서 선택하여 사용하면 된다. 아래에서 단순하게 Crypto를 사용해보자.

const cookieParser = require('cookie-parser');
const express = require('express');
const app = express();
const crypto = require('crypto');
app.use(cookieParser());

app.get('/', function (req,res,next) {
    let name = 'KIM';
    //HMAC는 데이터와 비밀 키 모두에 해시 알고리즘을 적용하여 단일 최종 해시를 생성하는 프로세스
    let hash = crypto.createHmac('sha256', name)
                     .update('crypto tutorial')
                     .digest('hex');
    res.cookie('myname', hash);
    res.send(req.cookies);
})

app.listen(3000, () => {
    console.log('listen!')
})

//Set-Cookie: myname=25be5e2f328a2cb619822bb79486d0d2b22ca5be529d42430499e57e55366518;

 

암호화를 해놨기 때문에 key가 myname인 것을 알지다로 value가 무엇인지 알 수 있는 방법이 없다. 데이터베이스가 만약 있다면 내가 가지고있는(물론 임의의 누군가는 이에 대해 접근이 불가능해야 할 것이다.) 데이터를 암호화 하였을때 값이 일치하였을 때만 정보를 제공하는 방식으로 하면 되겠다.

 

'Authentication' 카테고리의 다른 글

Session이란??  (0) 2020.09.13
Authentication (1) - 인증 & 권한이란?  (0) 2020.09.13