오늘 공부한것 & 기억하고 싶은 내용
bcrypt
- 비밀번호를 해시할 때 사용하는 라이브러리
- 해시함수는 단방향 멱등성 함수
- 데이터베이스에 비밀번호를 그대로 저장하지 않는다.(해킹의 위험성)
- 정해진 입력에 따라 정해진 난수를 출력함
npm i bcrypt
npm i @types/bcrypt
12345 => hashFunction(12345) => 4rejglkdhlk4-gdfh-096 (O)
hashFunction(4rejglkdhlk4-gdfh-096) => 12345 (X)
bcrypt하는 이유
- 보안상 데이터가 유출되어도, 원본 비밀번호를 알 수 없으니 해킹당하지않음
- 정형데이터로 정해진 양식, 정해진 길이로 맞출 수 있음
bcrypt.hash(비밀번호, saltRounds, function(err, hash) {
});
---
const hashedPassword = await bcrypt.hash(result.data.password, 12);
iron-session
- JavaScript에서 사용되는 세션 관리 라이브러리로, 안전성과 stateless(무상태) 특징을 갖춘 쿠키 기반 세션을 제공함
- 쿠키 기반 세션 : 사용자 브라우저에 쿠키를 전송하고, 이 쿠키를 통해 세션을 관리, 사용자가 요청을 보낼 때마다 쿠키가 자동으로 서버로 전송
- Stateless 설계 : 세션 데이터를 서버에 저장하지 않고 쿠키에 저장하므로, 서버는 상태를 유지하지 않아도 됨 => 서버의 부하를 줄이고 확장성을 높이는데 유리함
- 데이터 암호화 및 복호화 : 단순히 사용자 데이터를 쿠키에 저장하면 보안 문제가 발생할 수 있어 Iron-Session은 데이터를 암호화하여 쿠키에 저장하고, 서버에서 복호화하여 사용함
npm i iron-session
https://github.com/vvo/iron-session
1password password generator (비밀번호 생성기)
https://1password.com/password-generator
배운점 & 느낀점
지금까지 회원가입 프로세스를 공부해보았는데.. 어떤분이 요약해주신게 있어서 올려본다..
- zod를 이용해서 회원가입 폼을 검증
a. 검증 실패 시, 오류 메세지를 띄움
- 검증 성공 시, bcrypt를 이용해서 유저가 입력한 비밀번호 해싱
a. 해싱된 비밀번호가 데이터베이스에 저장됨
- 유저가 입력한 유저명, 이메일, 해싱된 비밀번호를 이용해서 DB에 유저를 생성
- 유저를 성공적으로 생성했다면 브라우저에 쿠키를 반환
a. iron session을 통해 설정한 cookieName에 해당하는 쿠키가 있는 지 확인하고, 없다면 세션 데이터를 암호화하고 쿠키를 설정함
(쿠키를 설정할 때는 쿠키에 저장할 데이터를 암호화하여 저장함)
- 위 단계를 모두 통과했다면 특정 페이지로 리다이렉트 처리