JS/Node.js

[NodeJS] BCrypt로 비밀번호 암호화하기

kth990303 2021. 6. 20. 07:56
반응형

그동안은 몽고디비에 postman으로 user를 저장할 때 db에 비밀번호가 그대로 실려 보안에 취약했었다.

따라서 이번에 bcrypt를 적용하여 비밀번호 해싱을 이용한 암호화를 통해 보안성을 높여주었다.

kth990303은 bcrypt 미적용, test1은 bcrypt 적용 계정이다.


npm으로 bcrypt 설치

아래 코드를 터미널에 입력해주자.

npm install bcrypt --save

5.0.1 version의 bcrypt가 설치됨을 확인할 수 있다.


DB 스키마에 bcrypt 적용

아래 코드를 models 폴더의 User.js에 추가해주자.

const bcrypt=require('bcrypt');
const saltRounds=10;

saltRounds는 10을 초과해도 상관이 없으나, 수가 커질수록 해싱 소요시간이 기하급수적으로 증가한다.

 

다음으로 아래 코드를 userSchema 아래에 추가해주자.

userSchema.pre('save', function(next){
    const user=this;
    // 비밀번호를 변경(새로 입력 포함)하는 경우에
    if(user.isModified('password')){
        // 비밀번호 암호화(bcrypt npm에 나와있는 코드)
        bcrypt.genSalt(saltRounds, function(err, salt) {
            if(err) return next(err);
            bcrypt.hash(user.password, salt, function(err, hash) {
                if(err) return next(err);
                // 해쉬화된 비밀번호로 변경
                user.password=hash;
                next();
            });
        });
    }
});

pre는 mongoose의 middleware 기능이다.

init, save, remove 등의 메소드를 실행할 때 처리되는 미들웨어이다.

그 외에 더 많은 기능은 아래 블로그를 참고하면 될 듯하다.

https://mobicon.tistory.com/302

 

[Mongoose] Schema의 Virtual, Method, Pre 테스트

Mongoose를 사용할 경우 몇가지 유용한 API를 제공하고 있다. 이중 virtual, method, pre에 대한 사용법을 알아보자. 예제는 로그인시 패스워드를 암호화 하는 코드를 가지고 파악해 본다 1. Schemas - http://m

mobicon.tistory.com


npm run start로 결과를 확인해보면 아래와 같이 해싱이 잘 됐음을 확인할 수 있다.

db가 털려도 비밀번호 유출 보안성에 대해 걱정을 덜을 수 있겠다.

반응형