-
728x90
회원가입을 구현할 때 회원 정보를 데이터베이스에 저장해야하는데
회원의 비밀번호를 평문 그대로 저장하게 된다면?
관리자가 모든 회원의 비밀번호를 알 수 있음 -> 보안 취약점 발생
비밀번호 저장 방법 - HASH
Hash란? 문자열을 되돌릴 수 없는 방식으로 암호화 하는 방법으로 Hash 출력값을 이용해 사용자의 비밀번호를 알아낼 수 없다.
비밀번호의 Hash 값을 데이터베이스에 저장하고 로그인 시 전달된 비밀번호를 Hash 하여 저장된 값과 비교하여 로그인을 처리한다.
bcrypt 사용하기
암호화 종류는 여러가지가 있지만, 그 중에서 bcrypt를 사용하여 비밀번호를 Hash 하려고 한다.
bcrypt는 단방향 해시 함수이기 때문에 해시 값에서 원본 데이터를 역추적하여 복호화 하는 건 불가능하다.
먼저 npm i bcryptjs 로 모듈을 설치해준다.
https://www.npmjs.com/package/bcrypt
bcrypt
A bcrypt library for NodeJS.. Latest version: 5.1.0, last published: 8 months ago. Start using bcrypt in your project by running `npm i bcrypt`. There are 3922 other projects in the npm registry using bcrypt.
www.npmjs.com
import bcrypt from "bcryptjs"; export const register = async (req, res, next) => { try { // bcrypt로 비밀번호 암호화 하기 const salt = bcrypt.genSaltSync(10); const hash = bcrypt.hashSync(req.body.password, salt); const newUser = await User.create({ username: req.body.username, email: req.body.email, password: hash, });
bcrypt 를 import 하고 genSaltSync() 함수로 비밀번호 해싱하기 위한 무작위 데이터 값인 salt를 생성한다.
(뒤에 숫자가 높을 수록 보안은 높아지지만 시간이 오래걸림)
hashSync()함수로 사용자가 입력한 비밀번호를 salt값과 함께 해싱한다.
이제 회원가입을 하게 되면 password는 해시된 비밀번호가 할당되어 데이터베이스에 저장된다.
비밀번호 확인
그렇다면 회원가입 후 로그인 할 때 입력한 비밀번호가 맞는지 확인 하려면 어떻게 해야할까?
const isPasswordCorrect = await bcrypt.compare( req.body.password, user.password );
bcrypt.compare() 함수에 입력한 비밀번호와 hash된 비밀번호를 넣어서 일치하는지 확인하기
'Node.js' 카테고리의 다른 글
[Node.js] req.params와 req.query (0) 2023.05.27 [Node.js] JWT (Json Web Token)이란? (0) 2023.05.26 [Node.js] Express 라우터 분리하기 (0) 2023.04.13 [Node.js] fs(파일 시스템) 사용하기 (0) 2023.04.11 [Node.js] path 모듈 (0) 2023.04.10 댓글