210414_TIL(HTTPS, Hashing, Cookie, CSRF)
✅Session 스프린트
세션의 개념을 이해하고, 쿠키와 세션은 어떤 관계이고 각각의 인증에 있어서 어떤 목적으로 존재하는 지 이해하는 스프린트였다.
즉, 쿠키와 세션에 대한 이해를 돕기 위한 스프린트였다.
클라이언트와 서버 요청 응답 관계에서 어떤 내용이 요청되고 응답되는지 공부할 수 있었다.
가볍게 내용을 정리하자면 쿠키는 웹 브라우저 상에 저장되고, 세션은 서버에 저장이 된다는 점이다.
Session 스프린트는 클라이언트부분, 서버 부분을 나눠서 작성해야됐고, 서버 구현을 할 때 인증서를 발급받아 구현하는 방식도 연습할 수 있었다.
시간이 부족한 점만 빼면 정말 좋았던 스프린트였던 것 같다.🤮
아래 gif는 클릭해서 봐주세요😅
회원 가입 및 로그인, 로그아웃과 같은 기능을 구현하게 됩니다. 이와 더불어 큰 개념인 인증(authentication) 에 대해서 알아봅니다.
클라이언트, 서버, 데이터베이스 모두를 다루면서, Full Stack 개발 환경에서의 전체적 흐름 및 작동을 직접 확인합니다.
Achievement Goals
- 암호화와 hashing, salting 등의 개념을 이해할 수 있다.
- HTTP와 HTTPS의 차이점을 이해할 수 있다.
- 권한 부여(Authorization)와 인증(Authentication)에 대해 이해할 수 있다.
- 쿠키의 작동 원리를 이해할 수 있다
- 세션 및 쿠키 / 토큰 / OAuth를 통해 인증 구현을 할 수 있다.
- 클라이언트, 서버, 데이터베이스의 전체 동작을 이해할 수 있다.
- 회원가입 및 로그인 등의 유저 인증에 대해 구현하고 이해한다.
- 서비스의 보안과 관련된 방법을 알아보고 원리 및 장점 및 단점을 이해한다.
🍒Remember
✅express-session
세션을 다루기 위한 익스프레스 미들웨어이다.
세션 아이디를 쿠키에 저장하고, 해당 세션 아이디에 종속되는 고유한 세션 객체를 서버 메모리에 저장시킬 수 있다.
이 때 세션 객체는 서로 독립적인 객체이므로 각각 다른 데이터를 저장할 수 있다.
req.session이 바로 세션 객체이며 req.session은 세션 객체에 세션 데이터를 저장거나 불러오기 위해 사용할 수 있다.
✅쿠키와 세션의 차이점 요약
쿠키는 접속 상태를 클라이언트에 저장하고, 세션은 접속 상태를 서버 메모리에 저장한다.
✅암호화(Encryption)
일련의 정보를 임의의 방식을 사용하여 다른 형태로 변환하여 해당 방식에 대한 정보를 소유한 사람을 제외하고 이해할 수 없도록 알고리즘을 이용해 정보를 관리하는 과정
✅Authentication-Hashing
어떠한 문자열에 임의의 연산을 적용하여 다른 문자열로 변환하는 것을 Hashing이라고 한다.
Hashing의 조건
1. 해시 값을 계산하는데 오래걸리지 않아야 한다.
2. 최대한 해시 값을 피해야 하며, 모든 값은 고유한 해시 값을 가져야 한다.
3. 아주 작은 단위의 변경이라도 완전히 다른 해시 값을 가져야 한다.
대표적인 해시 알고리즘은 SHA1, sha256등이 있다.
Salt
암호화해야 하는 값에 어떤 '별도의 값'을 추가하여 결과를 변형하는 것을 Salt이라고 한다.
Salt 특징
1 . 암호화만 해놓는다면 해시된 결과가 늘 동일하기 때문에 해시된 값과 원래 값을 레인보우 테이블로 만들어서 decoding 해버리는 경우도 생긴다.
2 . 원본값에 임의로 약속된 별도의 문자열을 추가하여 해시를 진행한다면 기존 해시값과 전혀 다른 해시값이 반환되어 알고리즘이 노출되더라도 원본값을 보호할 수 있도록 하는 안전 장치 역할을 한다.
3 . 기존에 (암호화 하려는 값) => (hash 값) 이라면
salt를 사용하면 (암호화 하려는 값) + (Salt 값) => (hash 값)이 되어 전혀 다른 hash 값이 된다.
Salt 사용 시 주의점
1 . 유저와 패스워드 별로 유일한 값을 가져야 한다.
2 . 사용자 계정을 생성할 때와 비밀번호를 변경할 때 마다 새로운 임의의 Salt를 사용해서 해싱해야 한다.
3 . 절대로 재사용 불가!
4 . DB의 유저 테이블에 값이 저장되어야 한다.
✅CSRF(Cross Site Request Forgery)
다른 오리진(cross-site)에서 유저가 보내는 요청(request)를 조작(forgery)하는 것으로 다른 오리진이기 때문에 해커가 직접 response에 접근할 수 없다는 특징이 있다.
CSRF 공격을 하기 위한 조건
1. 쿠키를 사용한 로그인
유저가 로그인 했을 때 쿠키로 어떤 유저인지 알 수 있어야 한다.
2. 예측할 수 있는 요청/parameter를 가지고 있어야 한다.
request에 해커가 모를 수 있는 정보가 담겨 있으면 안된다.
CSRF 방어 방법
1. CSRF 토큰 사용하기
서버측에서 CSRF 공격에 보호하기 위한 토큰 문자열을 유저의 브라우저와 웹 앱에만 제공해서 이 조합으로 생성된 요청에만 성공적으로 요청을 완료해준다.
2. Same-site cookie 사용하기
같은 도메인에서만 세션/쿠키를 사용할 수 있다.
🍒More Study
✅Token, JWT
✅Toy 풀기