HTTPS에 대한 설명
HTTPS는 최신 프로토콜의 기반입니다. HTTP를 사용한 통신은 3자가 중간에 요청을 가로 채갈 경우 데이터를 쉽게 빼낼 수 있지만, HTTPS를 사용한 통신은 암호화가 되어있기 때문에 제3자가 중간에 요청을 가로채도 쉽게 복호화할 수 없습니다.
- 인증서를 기반으로 데이터 제공자의 신원을 보장받을 수 있다.
- 기존 HTTP 보다 안전한 통신 프로토콜이다.
- 공개 키 암호화(Public-key cryptography) 방식을 사용한다.
비대칭 키 암호화에 대한 올바른 설명
- 암호화와 복호화에 서로 다른 키를 사용하는 방식이다.
- public key는 누구에게나 공개해도 되는 키다.
- public key로 암호화한 데이터는 그에 맞는 private key로 복호화가 가능하다.
해시 함수에 대한 설명
- SHA-256 알고리즘을 사용했을 경우 출력값의 길이는 언제나 동일하다.
- 해싱 알고리즘 해독은 절대 불가능한 건 아니다.
- 해시 알고리즘은 특정 입력값에 대해 항상 같은 해시값을 리턴한다.
쿠키에 대한 설명
- 쿠키는 MaxAge or Expires로 삭제 될 수 있다.
- httpOnly 옵션을 사용해 Javascript의 접근을 막을 수 있다.
- sameSite=none은 모든 요청에 대해 쿠키를 주고 받을 수 있지만 HTTPS 프로토콜을 사용하는 것이 필수적이다.
- 요청하는 서버의 도메인, 경로, sameSite 등의 조건이 맞아떨어질 경우 같이 전송된다.
쿠키 옵션 설명
- domain - 서버와 요청의 도메인이 일치하는 경우 쿠키 전송
- path - 서버의 요청의 세부 경로가 일치하는 경우 쿠키 전송
- maxage/expires - 쿠키의 유효기간 설정
- httpOnly - 스크립트의 쿠키 접근 가능 여부 설정
- secure - HTTPS 에서만 쿠키 전송 여부 설정
- sameSite - 같은 사이트에서만 쿠키를 사용할 수 있게 하는 설정
쿠키 sameSite 옵션 설명
- Lax: 사이트가 서로 달라도 GET 요청이라면 쿠키 전송이 가능하다.
- Strict: 사이트가 서로 다르면, 쿠키 전송을 할 수 없다.
- None: 사이트가 달라도, 모든 (GET, POST, PUT 등) 요청에 대해 쿠키 전송이 가능하다.
Session 기반 인증 방식 설명
- 세션은 하나의 서버에서만 접속 상태를 저장한다.
- 신뢰할 수 있는 유저인지 확인이 가능하다.
- 쿠키에 세션 아이디가 저장된다.
CSRF 설명
- 악성 스크립트가 담긴 사이트를 열거나 링크를 클릭했을 때 변조된 요청을 보내는 공격이다.
- 기존의 로그인한 기록을 바탕으로 서버가 클라이언트의 요청을 믿기 때문에 발생한다.
- sameSite 옵션을 none이 아닌 것으로 바꾸어 CSRF 공격을 막을 수 있다.
토큰 기반 인증 사용 이유
- 서버의 부담을 덜어준다.
- 여러 개의 서버를 사용하는 서비스를 운영할 때 좋다.
- 앱의 확장성을 고려할 수 있다.
JWT 설명
- Header: 어떤 종류의 토큰을 사용하는지, 어떤 알고리즘으로 암호화했는지 적혀 있다.
- Payload: 권한 정보가 담겨 있고, 민감한 정보는 담지 않는 것이 좋다.
- Signature: Header, Payload를 인코딩한 결과 salt값의 조합으로 암호화 되어 있다.