[TIL] Database Validation, bcrypt, iron-session

👉🏼 KIM·2024년 12월 1일

TIL

목록 보기
49/54

오늘 공부한것 & 기억하고 싶은 내용

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) {
// 비밀번호 DB에 해시를 저장하세요.
});

---
const hashedPassword = await bcrypt.hash(result.data.password, 12); 
//해싱 알고리즘을 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

배운점 & 느낀점

지금까지 회원가입 프로세스를 공부해보았는데.. 어떤분이 요약해주신게 있어서 올려본다..

  1. zod를 이용해서 회원가입 폼을 검증
    a. 검증 실패 시, 오류 메세지를 띄움
  2. 검증 성공 시, bcrypt를 이용해서 유저가 입력한 비밀번호 해싱
    a. 해싱된 비밀번호가 데이터베이스에 저장됨
  3. 유저가 입력한 유저명, 이메일, 해싱된 비밀번호를 이용해서 DB에 유저를 생성
  4. 유저를 성공적으로 생성했다면 브라우저에 쿠키를 반환
    a. iron session을 통해 설정한 cookieName에 해당하는 쿠키가 있는 지 확인하고, 없다면 세션 데이터를 암호화하고 쿠키를 설정함
    (쿠키를 설정할 때는 쿠키에 저장할 데이터를 암호화하여 저장함)
  5. 위 단계를 모두 통과했다면 특정 페이지로 리다이렉트 처리
profile
프론트는 순항중 ¿¿

0개의 댓글