티스토리 뷰
express.js로 로그인 시스템을 구현할 때 적용할 수 있는 주요 보안 방식들을 아래와 같이 정리해 보았어. 이 방식들을 조합하면 안전한 인증 시스템을 설계할 수 있습니다.
1. 패스워드 보안
- 해싱(Hashing):
- 비밀번호는 절대 평문으로 저장하지 말고, 해시 알고리즘(Bcrypt, Argon2 등)을 사용해 안전하게 저장해야 함.
- bcrypt.js 또는 argon2 라이브러리를 사용.
- Salting:
- 같은 비밀번호라도 다른 해시 값을 가지도록 Salt를 추가.
2. 세션 관리 및 쿠키 보안
- 세션 기반 인증:
- express-session을 사용해 세션 관리.
- 서버에서 세션 데이터를 저장하고, 클라이언트는 세션 ID 쿠키만 유지.
- 쿠키 설정:
- HttpOnly: 자바스크립트로 쿠키 접근 차단.
- Secure: HTTPS에서만 쿠키 전달.
- SameSite: 크로스 사이트 요청 위조(CSRF) 방지.
- Redis로 세션 저장:
- 세션 데이터를 connect-redis와 같은 라이브러리를 사용해 Redis에 저장.
3. JWT(Json Web Token) 기반 인증
- JWT 토큰 사용:
- 사용자 인증 후 토큰 발급.
- 토큰에는 민감한 정보를 담지 않고, 필요한 정보만 포함.
- 서명 키 관리:
- JWT 서명을 위한 secret key를 안전하게 보관 (환경 변수에 저장).
- 가능한 RSA와 같은 비대칭 키 암호화 사용.
4. CSRF(Cross-Site Request Forgery) 방지
- CSRF 토큰:
- csurf 미들웨어를 사용해 CSRF 공격을 방지.
- 각 요청에 CSRF 토큰 포함.
5. Rate Limiting(요청 제한)
- Brute Force 방지:
- express-rate-limit 라이브러리를 사용해 특정 IP의 로그인 시도 횟수를 제한.
- Captcha 추가도 유효.
6. HTTPS 사용
- 모든 요청을 HTTPS로 강제 리다이렉트.
- SSL/TLS 인증서를 적용.
7. 입력 데이터 검증 및 방어
- SQL Injection 방지:
- ORM/Query Builder 사용 (Sequelize, TypeORM 등).
- 쿼리 시 파라미터 바인딩을 활용.
- XSS 방지:
- 사용자 입력 데이터에 대해 HTML 이스케이프 처리 (xss-clean 라이브러리).
8. 2단계 인증 (2FA)
- OTP(One Time Password):
- Google Authenticator나 Authy와 같은 앱 사용.
- SMS/Email 인증:
- 로그인 시 추가 코드 전송.
9. 로그 및 모니터링
- 로그 기록:
- winston 또는 morgan으로 중요한 이벤트(로그인 시도, 실패 등) 기록.
- 이상 행동 감지:
- 비정상적인 로그인 시도 시 알림 또는 차단.
10. 환경 변수 사용
- 민감한 정보(DB URL, JWT Secret, API Key)는 .env 파일에 저장하고, dotenv로 불러오기.
이 방법들 중 패스워드 보안과 세션 관리/쿠키 보안은 기본적으로 적용해야 하고, JWT, 2FA 등은 필요에 따라 확장적으로 적용하면 좋습니다.
'IT 이야기 > Node.js' 카테고리의 다른 글
[SERVER] ubuntu, nginx, node.js mariaDB로 서버 세팅하기 (1) | 2024.09.26 |
---|---|
[express.js] express.js와 mariaDB를 이용하는 기본 설정 (0) | 2024.09.24 |
Hostinger 사용기1 - 설치 (0) | 2024.06.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
- W3Schools Online Web Tutorials
- 구차니의 잡동사니 모음
- [IT]블로거팁닷컴
- 비앤아이님의 블로그
- Blog Suspect
- 즐거운하루 blog
- zinicap의 검색엔진 마케팅(SEM)
- 머니야머니야님의 블로그
- [Friend] AtinStory
- [기타배우기]해브원 박스
- [웹표준] SINDB.com
- 해커 C 이야기
- [애드센스] 길라잡이
- 정순봉의 IT SCHOOL
- 씨디맨의 컴퓨터이야기
- 2proo Life Story
- 못된준코의 세상리뷰
- [IT강좌] 정보문화사
- IN 대전
- 에우르트는 나쁜남자 -_-
- 씬의 싱크탱크
- 엔돌슨의 IT이야기
- 진이늘이
- 'Cooltime'의 블로그
- 후이의 Tistory
- Soulstorage
- 앤드&엔드의 블로그
- June Blog
- 노지의 소박한 이야기
- gbWorld
- 인터넷 속 나의 생각
- HarshNix
- ART of WEB
- 녹두장군 - 상상을 현실로
TAG
- JavaScript
- 안드로이드 어플
- 인터넷
- 모토로이
- C
- 소스코드
- C언어
- HTML
- 안드로이드
- MBTI 강좌
- 성공
- 안드로이드 어플 추천
- 프로그래밍 문제
- 인터넷 익스플로러
- 리뷰
- 예제 소스
- C언어 문제
- 강좌
- 효과음
- MBTI 테스트
- C언어 소스
- MBTI 자료
- 프로그래밍
- php
- 스마트폰
- MBTI 검사
- 소스
- 강의
- It
- MBTI
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함