🔐
【Express】パスワードのハッシュ化とtokenの生成【セキュリティ】
はじめに
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の用途
- 認証
JWT認証などで、ログイン状態を維持するために用いる
またユーザ登録後のアカウント有効化、パスワードリセットの際にもこのtokenは利用される
ユーザのアプリ操作を可能にする - セキュリティ対策
CSRF攻撃対策で用いる - アカウントの確認
アカウント登録を行うときのメアド確認のために、一時的に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