개발하는 너구리

bcrypt, iron-session 본문

TIL

bcrypt, iron-session

너구리개발자 2024. 7. 2. 22:53

bcrypt 라이브러리

설명

bcrypt는 비밀번호 해싱을 위한 라이브러리로, 보안성을 높이기 위해 설계되었습니다. 비밀번호를 단방향 해시 함수로 변환하여 데이터베이스에 저장하고, 인증 시 해시된 값과 비교하여 유효성을 검증합니다. 이 방식은 비밀번호를 직접 저장하는 것보다 안전합니다.

주요 특징

  1. 강력한 보안성: bcrypt는 반복 작업을 통해 해시 값을 생성하여, 무작위 대입 공격에 대한 방어력을 높입니다.
  2. 소금(salt) 추가: 해시 값 생성 시 고유한 소금을 추가하여 동일한 비밀번호라도 해시 값이 다르게 나옵니다.
  3. 비용 인자(cost factor): 해시 연산의 복잡도를 조정할 수 있어, 컴퓨팅 성능 향상에 따라 보안 수준을 높일 수 있습니다.
import bcrypt from 'bcrypt';

// 비밀번호 해싱
const saltRounds = 10;
const plainPassword = 'your_password';
bcrypt.hash(plainPassword, saltRounds, function(err, hash) {
    if (err) throw err;
    // 해시된 비밀번호를 데이터베이스에 저장
    console.log(hash);
});

// 비밀번호 비교
const storedHash = 'stored_hash_from_db';
bcrypt.compare(plainPassword, storedHash, function(err, result) {
    if (err) throw err;
    if (result) {
        console.log('비밀번호 일치');
    } else {
        console.log('비밀번호 불일치');
    }
});

 

 

 

 

 

iron-session 라이브러리

설명

iron-session은 서버 사이드 세션 관리를 위한 라이브러리로, 쿠키를 암호화하여 클라이언트에 저장하고, 서버에서 세션 데이터를 안전하게 관리할 수 있게 합니다. 주로 Next.js와 함께 사용되며, 쿠키 기반 인증을 간편하게 구현할 수 있습니다.

주요 특징

  1. 쿠키 암호화: iron-session은 쿠키에 저장된 데이터를 암호화하여 보안을 강화합니다.
  2. 타입 안전성: TypeScript와 호환되어 타입 안전성을 보장합니다.
  3. 간편한 사용법: Next.js의 API Routes와 쉽게 통합할 수 있어, 설정과 사용이 간편합니다.
import { withIronSessionApiRoute } from "iron-session/next";

export default withIronSessionApiRoute(async (req, res) => {
  if (req.method === 'POST') {
    const { username, password } = req.body;
    // 사용자 인증 로직
    if (username === 'admin' && password === 'password') {
      req.session.user = { id: 1, admin: true };
      await req.session.save();
      res.send({ ok: true });
    } else {
      res.status(401).send({ error: 'Unauthorized' });
    }
  }
}, {
  cookieName: "myapp_session",
  password: process.env.SESSION_PASSWORD,
  cookieOptions: {
    secure: process.env.NODE_ENV === "production",
  },
});

// app/pages/api/me.ts
import { withIronSessionApiRoute } from "iron-session/next";

export default withIronSessionApiRoute(async (req, res) => {
  if (req.session.user) {
    res.send({ user: req.session.user });
  } else {
    res.status(401).send({ error: 'Unauthorized' });
  }
}, {
  cookieName: "myapp_session",
  password: process.env.SESSION_PASSWORD,
  cookieOptions: {
    secure: process.env.NODE_ENV === "production",
  },
});

'TIL' 카테고리의 다른 글

interceptor routes , parallel routes  (0) 2024.07.05
sever action  (0) 2024.07.04
prisma  (0) 2024.07.02
zod  (0) 2024.06.28
@tailwind  (0) 2024.06.27