728x90
⚠️ 문제
공개적으로 배포하는 프로젝트일 경우, 비밀번호 암호화가 필수라고 한다.
💭 물론, db가 뚫리지않는게 가장 베스트긴 하지만,, 이게 내 맘대로 되는 건 아니니까ㅠ^ㅠ..
그래서 crypto
node.js 라이브러리를 사용해서 암호화를 진행했다.
🏃 시도
#1
- 암호화, 복호화 함수를 회원가입 부분에 추가했다.그래서 알게 된 게
salt
라는 건데, salt는 소금을 뿌리듯이 해시값에 임의의 값을 추가하는 것이라고 한다. - 근데 생각해보니, 복호화는 회원가입 부분이 아니라 passport나 세션에 직접적으로 넣어주는 부분에 구현해야한다는 걸 간과했다...
#2
bcrypto
를 사용해서 해시값을 생성하는 것 까진 됐는데.. compare 메서드로 해시값이랑 패스워드를 비교했을때 패스워드를 맞게 입력 했는데도 자꾸만False
를 반환한다..?→ VARCHAR(100) 으로 자료형 변경해줘서 해결 완료 ! ✨- → db에 자료형이 VARCHAR(50) 으로 되어있어서 해시값을 다 못 담았던 것...!
✨ 해결
- salt를 db에 따로 컬럼으로 추가해주고 로그인할 때마다 꺼내와서 다시 돌리려고 했는데 무의미한 일이었다..
- 고냥
bcypto
라이브러리를 사용하는 방향으로 개선했다.
📄 signup.js
bcrypt.hash(user_password, saltRounds, (err, hash) => {
...
}
- 📄 signup.js (회원가입 라우터 구현) 에 해시값, 솔트값을 자동 생성해주는 hash 메서드를 사용해서 db에 해시값을 저장했다.
📄 index.js
bcrypt.compare(password, returnPassword, (err, result) => {
...
}
- 📄 index.js (로그인 구현)에 해시값을 비교하는 compare 메서드를 사용해서 사용자 입력 패스워드와 db에 저장된 해시값을 비교한다.
- 같으면
True
반환 - 다르면
False
반환
- 같으면
🥰 구현완료!
🔗 참고
- [Node.js] crypto로 비밀번호 암호화하기
- [2019.06.04] 오늘의 TIL- 암호화 bcrypt.compare가 무조건 false로 나던 문제
- https://github.com/kelektiv/node.bcrypt.js
💡 깨달은 점
crypto
보다bcrypto
가 보안성이 더 높다!- 보안을 더 강화하려면 salt (소금치듯이 일정값을 중간중간 추가해줌)를 여러번 수행하면 된다.
- ❓ SHA-512
728x90
'🎨 Project' 카테고리의 다른 글
[BE/Node.js] AWS S3에 log 저장하기 (0) | 2022.10.04 |
---|---|
[BE/GitLab] GitLab Pipelines로 배포 자동화하기 (0) | 2022.10.01 |
[BE/Git] Git push 파일 용량 초과 문제 해결하기 (2) | 2022.09.06 |
[BE/Node.js] apidoc으로 api document 만들기 (0) | 2022.09.02 |