법률상의 강제
database에 저장할 때 개인정보를 해싱해서 복원할 수 없도록 해야 한다.
통신 시 개인 정보를 주고 받을 때 ssl을 적용하여 암호화(HTTPS)
암호화
단방향 해쉬
해쉬 함수는 자료구조에서 빠른 자료의 검색, 데이터의 위변조 체크를 위해서 쓰이지만, 복원이 불가능한 단방향 해쉬함수는 암호학적 용도로 사용합니다.
단점: 같은 알고리즘에 넣으면 비밀번호 해석 가능합니다. => 해킹문제
SALTIN & KeySretching
- 소금을 치고 늘린다.
입력한 비밀번호와 임의로 생성한 문자열을 합쳐서 해싱해서 이 해시값을 저장하는 방법입니다. 해킹에 시간이 오래걸리도록 salting및 해싱을 여러번 반복해서 원본 값을 유추하기 어렵게 합니다.
- 대표적인 라이브러리: bcrypt
DB의 정보와 비밀번호를 비교 해야 합니다. 그러나 단방향 해쉬이므로 DB에 있는 데이터를 원래의 비밀번호 형식으로 바꿀 수는 없습니다.
방법은 유저가 로그인하려고 입력한 값을 같은 방식으로 해싱하여 비교하는 것 밖에 없습니다.
에러 핸들링
에러에는 두 개의 종류가 있습니다. js상의 에러와, 커스텀에러입니다.
되도록 발생하는 오류들이 커스텀에러에서 걸러지도록 해아 합니다.
커스텀 에러 방법
try{
const err = 'message'
err.statusCode = 400
throw err
}catch(err){
return res.status(err.statusCode || 500).json( { message: err.message})
}
로그인에 성공하면 사용자가 서비스를 이용 할 수 있도록 access token이라는 것을 줘야합니다. (Http는 stateless이기에 토큰을 주지 않으면 이전 통신을 기억하지 못합니다.)
Token 암호화하는 방법
-JWT(json web tokens)
유저가 요청하는 request를 실행할 수 있는 권한이 있는 유저인가를 확인하는 절차입니다.
유저도 요청을 보낼 때 암호화된 token을 첨부합니다. 이 유저가 누구인지를 알아야하기에 암호화를 복호화합니다.
복호화하는 방법