일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 자바스크립트
- image component
- iron-session
- dynamic pages
- 3진법 뒤집기
- supabase realtime
- @tailwind components
- 타입스크립트
- sever components
- revalidatetag
- revalidatepath
- static pages
- createbrowserrouter
- 프로그래머스
- CSS
- @tailwind base
- unstable_nostore
- sever action
- RECOIL
- SSR
- @tailwind utility
- js
- 리액트
- commit phase
- server components
- client components
- render phase
- @tailwind
- 클로저
- interceptor routes
Archives
- Today
- Total
개발하는 너구리
bcrypt, iron-session 본문
bcrypt 라이브러리
설명
bcrypt는 비밀번호 해싱을 위한 라이브러리로, 보안성을 높이기 위해 설계되었습니다. 비밀번호를 단방향 해시 함수로 변환하여 데이터베이스에 저장하고, 인증 시 해시된 값과 비교하여 유효성을 검증합니다. 이 방식은 비밀번호를 직접 저장하는 것보다 안전합니다.
주요 특징
- 강력한 보안성: bcrypt는 반복 작업을 통해 해시 값을 생성하여, 무작위 대입 공격에 대한 방어력을 높입니다.
- 소금(salt) 추가: 해시 값 생성 시 고유한 소금을 추가하여 동일한 비밀번호라도 해시 값이 다르게 나옵니다.
- 비용 인자(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와 함께 사용되며, 쿠키 기반 인증을 간편하게 구현할 수 있습니다.
주요 특징
- 쿠키 암호화: iron-session은 쿠키에 저장된 데이터를 암호화하여 보안을 강화합니다.
- 타입 안전성: TypeScript와 호환되어 타입 안전성을 보장합니다.
- 간편한 사용법: 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 |