인증 및 보안 (HTTPS, Hashing, Cookie, Session)

citron03·2022년 2월 16일
0

HTTPS (Hyper Text Transfer Protocol Secure Socket layer)

  • HTTPS는 HTTP에 Secure를 포함한 것이다.
  • HTTP에 담긴 데이터를 암호화하여 공격에 대비한다.
    🍵 공격자에 의해서 요청 및 응답이 탈취될 수 있다.
  • HTTPS의 특징으로 인증서, CA, 비대칭 키 암호화가 있다.
  • 현업에서 HTTPS 프로토콜을 사용하는 것이 일반적이다.
  • HTTPS 프로토콜은 인증의 중요한 부분을 차지한다.

🍏 인증서를 통해서 데이터 제공자의 신원을 보장하고 도메인에 종속되게 한다. (인증서 도메인과 응답 도메인을 서버가 비교한다.)

🥟 mkcert을 이용해서 로컬 환경에서 신뢰할 수 있는 인증서를 만들 수 있다.

🍖 CA(certificate Authority)는 공인 인증서 발급 기관이다.

🌹 비대칭 키 암호화는 암호화와 복호화를 하는데 있어서 쌍이되는 서로 다른 키를 사용하는 것을 의미한다.

🍰 CSRF는 대표적인 공격으로 Cross Site Request Forgery를 의미한다. 다른 사이트에서 유저가 보내는 요청을 조작한다.

🍰 해커가 직접 데이터에 접근할 수는 없지만, 쿠키를 사용하여 로그인하며 예측할 수 없는 요청이나 파라미터를 가지면 CSRF의 위험이있다.
🍰 CSRF 토큰을 사용하거나 same-site 쿠키를 사용해 예방한다.

Hashing

  • Hasing은 암호화의 기본으로, 일련의 정보를 통한 임의의 방식으로 다른 형태로 데이터를 변환하는 것을 의미한다.
  • 해당하는 일련의 정보가 있어야 정보를 이해할 수 있다.
  • 알고리즘을 이용해 정보를 관리한다.

Salt

  • 암호화한 값에 추가적으로 salt값을 추가해 결과를 변형한다.
  • salt를 더한 뒤 hashing을 하여 데이터를 암호화한다.

🧊 stateless한 HTTP에서 정보를 유지할 수 있는 방법으로는 Cookie가 있다.

  • 쿠키는 어떤 웹사이트에 들어갔을 때, 서버가 일방적으로 클라이언트에 전달하는 작은 데이터이다.
  • 서버는 클라이언트에 인증 정보를 담은 쿠키를 전송한다.
  • 클라이언트는 전달받은 쿠키를 요청과 같이 전송하여 Stateless 한 인터넷 연결을 Stateful 하게 유지할 수 있게 한다.
    🧁 서버가 클라이언트에 데이터를 저장한다.
  • 쿠키는 사용자의 선호도나(로그인 유지) 테마(다크모드), 장기간 보존 데이터저장에 적합하다.
  • 쿠키는 특정 조건(쿠키 옵션)을 만족할 때만 데이터를 가져올 수 있다.
  • 쿠키 옵션에는 Domain, Path, MaxAge or Expires, Secure, HttpOnly, SameSite(Lax / Strict / None)등이 있다.
  • 하지만, 쿠키는 자바스크립트로 접근할 수 있어서 보안에 위험요소가 된다.
    🥧 쿠키는 script태그를 통해서 접근할 수 있어 XSS공격에 취약하다.
  • 따라서 쿠키또한 암호화가 필수적이고 민감한 데이터는 담지 않는 것이 좋다.

🥖 XSS(Cross-Site Scripting) : 웹사이트에 스크립트를 삽입하여 공격한다.

Session

  • 서버가 클라이언트에 유일하고 암호화된 ID를 부여한다.
    🧃 Session을 이용한 인증에서 유저 정보는 서버에서 관리된다.
    🧃 Token 기반 인증은 클라이언트에 암호화된 유저 정보를 담는다.
  • 한 번 서버에 인증을 성공했다면, 서버는 이미 유저 정보의 해시를 알고 있다.
  • 즉, '인증에 성공한 것'을 서버가 알고있다면, 추후에 다시 인증을 할 필요가 없다.
  • 사용자가 인증에 성공한 상태를 세션이라고 한다.
  • 세션이 만들어지면, 각 세션을 구분할 수 있는 세션 아이디도 만들어진다.
  • 쿠키에 서버에서 발급한 세션 아이디를 저장하여 웹사이트의 로그인을 유지한다.
  • 로그아웃을 한다면, 서버의 세션 정보를 삭제하고 클라이언트의 쿠키를 갱신해야 한다.

☕ node.js 환경의 express에서는 express-session으로 세션을 관리할 수 있다.

profile
🙌🙌🙌🙌

0개의 댓글