記錄

생활코딩_Node.js) cookie 암호화 본문

Web/Node.js

생활코딩_Node.js) cookie 암호화

surhommejk 2018. 8. 3. 14:56

cookie에 저장하는 정보가 민감하고 private 한 정보라면 암호화할 필요성이 있다.

개발자 도구에서 cookie를 눌러보면 정보가 다 보이기 때문이다.


물론, jsp를 배울때도 마찬가지고 node.js를 배울 때도 마찬가지고 사실 민감한 정보 자체를 cookie에 저장할 일은 없는데

항상 괜히 session을 배우기 전에 cookie를 배우면서 이런 개념을 알려준다(어느 인강이나 비슷한 것 같다)


아무튼 암호화 자체도 스프링보다 훨씬 가볍고 쉬웠다



암호화 전



암호화 후


cookie의 값을 보안상의 이유로 암호화 할 수 있는데 방법은 다음과 같다.


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

// cookieParser의 파라미터로 암호화에 사용할 Key값을 임의로 입력
app.use(cookieParser('12354dssa#@!%#!'));

app.get('/count',function(req, res){

let count;

// req.cookies.count => req.signedCookies.count 로 변경
if(req.signedCookies.count){
// cookie 에서 가져오는 값은 모두 String type이 디폴트
count = parseInt(req.signedCookies.count);
} else{
count = 0;
}

count += 1;

// cookie 생성시에도 세 번째 파라미터로 {signed:true}를 넣어주어 암호화 한다
res.cookie('count', count, {signed:true});
res.send('count : ' + count);

});

app.listen(3000, function(){
console.log('Connected!');
});


1. 미들웨어 장착시 파라미터에 암호화에 사용할 key 값을 넣는다

// cookieParser의 파라미터로 암호화에 사용할 Key값을 임의로 입력
app.use(cookieParser('12354dssa#@!%#!'));


2. cookie를 read시에 req.signedCookies.keyname으로 꺼내온다

// req.cookies.count => req.signedCookies.count 로 변경
if(req.signedCookies.count){
// cookie 에서 가져오는 값은 모두 String type이 디폴트
count = parseInt(req.signedCookies.count);
} else{
count = 0;
}


3. cookie를 생성 할 때에 세 번째 파라미터로 {signed: true} 를 넣어준다

// cookie 생성시에도 세 번째 파라미터로 {signed:true}를 넣어주어 암호화 한다
res.cookie('count', count, {signed:true});


Comments