상황: 웹 애플리케이션에서 사용자의 비밀번호를 데이터베이스에 저장할 때, 보안이 취약한 방식으로 저장하면 해커들에게 노출될 위험이 있습니다. 비밀번호를 안전하게 저장하는 방법이 필요합니다.
해결방안: 사용자의 비밀번호를 해시(hash)하고 솔트(salt)를 추가하여 안전하게 저장합니다.
1.
해시 및 솔트 라이브러리 설치
Node.js 환경에서 bcrypt 라이브러리를 사용하여 비밀번호를 해시하고 솔트를 추가할 수 있습니다. 먼저 bcrypt 라이브러리를 설치합니다.
bashCopy code
npm install bcrypt
Plain Text
복사
2.
비밀번호 해시 및 솔트 코드 작성
bcrypt 라이브러리를 사용하여 비밀번호를 해시하고 솔트를 추가하는 코드를 작성합니다.
javascriptCopy code
const bcrypt = require('bcrypt');
async function hashPassword(password) {
const saltRounds = 10;
const hashedPassword = await bcrypt.hash(password, saltRounds);
return hashedPassword;
}
async function checkPassword(password, hashedPassword) {
const isValid = await bcrypt.compare(password, hashedPassword);
return isValid;
}
JavaScript
복사
3.
사용자 비밀번호 저장 및 검증
사용자가 회원 가입을 할 때, 비밀번호를 해시하고 솔트를 추가한 뒤 데이터베이스에 저장합니다. 사용자가 로그인을 할 때, 입력한 비밀번호와 저장된 해시된 비밀번호를 비교하여 검증합니다.
javascriptCopy code
const express = require('express');
const app = express();
app.use(express.json());
app.post('/register', async (req, res) => {
const { username, password } = req.body;
const hashedPassword = await hashPassword(password);
// 데이터베이스에 사용자 정보와 해시된 비밀번호 저장
});
app.post('/login', async (req, res) => {
const { username, password } = req.body;
// 데이터베이스에서 사용자 정보와 해시된 비밀번호 조회
const isValid = await checkPassword(password, hashedPassword);
if (isValid) {
// 로그인 성공 처리
} else {
// 로그인 실패 처리
}
});
JavaScript
복사
이러한 방법으로 사용자의 비밀번호를 해시하고 솔트를 추가하여 데이터베이스에 안전하게 저장할 수 있으며, 로그인 시 해시된 비밀번호를 사용하여 검증할 수 있습니다. 이를 통해 웹 애플리케이션의 보안을 강화할 수 있습니다.