🔐

【Express】パスワードのハッシュ化とtokenの生成【セキュリティ】

2024/12/30に公開

はじめに

ExpressにてMERNフルスタックアプリ開発を行っており、
認証機能を作るにあたってパスワードのハッシュ化とtokenの生成などセキュリティ対策が必要だったためまとめてみた

ハッシュ化とは

パスワードなどに主に用いる。
元のパスワードを複雑な文字列にすることで、素のパスワードを保存するより安全性を上げることができる。

ハッシュ化試してみた

bcryptの導入

yarn add bcrypt
import bcrypt from 'bcrypt'

export const hashPassword = async (password: string) => {
  const salt = await bcrypt.genSalt(5)
  return await bcrypt.hash(password, salt)
}

上記を用いて

const user = new User(req.body)
user.password = await hashPassword(password)

このように、user情報のpasswordをハッシュ化できる
genSaltの値は高いほど複雑なものを生成できるが、その分処理が重くなる

tokenとは

主に認証やセッション管理、データの確認などで用いる一時的なデータ片

tokenの用途

  1. 認証
      JWT認証などで、ログイン状態を維持するために用いる
      またユーザ登録後のアカウント有効化、パスワードリセットの際にもこのtokenは利用される
      ユーザのアプリ操作を可能にする
  2. セキュリティ対策
      CSRF攻撃対策で用いる
  3. アカウントの確認
      アカウント登録を行うときのメアド確認のために、一時的にtokenを生成する

tokenの生成

//MEMO: 6桁のtokenをランダムな整数を用いて生成
export const generateToken =
 async () => Math.floor(100000 + Math.random() * 900000).toString()

上記を用いて

const token = generateToken()
user.token = token

このようにすることで、tokenを生成できる
生成したtokenはパスワードリセットやアカウント有効化などに用いられる

Discussion