TIL 55- Authentication Checkpoint

Churro.·2021년 12월 29일
0
post-custom-banner

1. 해시 함수

  • SHA-256 알고리즘을 사용했을 경우 출력값의 길이는 언제나 동일하다

→ SHA-256 알고리즘을 사용했을 경우 출력값의 길이는 입력값의 길이와 관계없이 언제나 256비트(64 글자)다.

  • 해시 알고리즘은 특정 입력값에 대해 항상 같은 해시값을 리턴한다.

→ 이 점을 이용해서 인증을 할 수 있는 것이다. 어떤 입력값인지는 모르지만 해시 함수를 이용해서 해시된 값이 일치하다면 입력값이 같다는 것을 입증할 수 있다.

  • 해싱 알고리즘은 해독이 거의 불가능하지만 아예 불가능하진 않다

→ 현실적으로는 시간이 오래 걸려 불가능하지만, 수학적으로는 가능하다. MD5는 일반적인 컴퓨터를 이용하여 2013년도에 20시간을 들여 90% 이상을 해독하는 데 성공했다.

2. 쿠키

  • 쿠키가 삭제되는 경우: MaxAge 또는 Expires 옵션이 설정되는 쿠키의 경우 설정된 시간이 지난 이후 자동으로 제거한다. 해당 옵션이 없는 경우, 대부분의 브라우저에서는 쿠키를 지우지 않으므로, 쿠키는 보존된다. (참고: mdn의 "세션 쿠키" 설명과는 다르게, 현대의 브라우저는 쿠키를 지우지 않는 것이 기본 옵션.)
  • httpOnly 옵션을 사용하면 자바스크립트를 이용해서 쿠키에 접근할 수 없다.
  • sameSite=none은 모든 요청에 대해 쿠키를 주고받을 수 있지만 Secure 옵션, 즉 HTTPS 프로토콜을 사용하는 것이 필수적

3. 쿠키 옵션

domain - 서버와 요청의 도메인이 일치하는 경우 쿠키 전송

path - 서버의 요청의 세부 경로가 일치하는 경우 쿠키 전송

maxage/expires - 쿠키 유효기간 설정

httpOnly - 스크립트의 쿠키 접근 가능 여부 설정

secure - HTTPS 에서만 쿠키 전송 여부 설정

sameSite - 같은 사이트에서만 쿠키를 사용할 수 있게 하는 설정

      Lax: 사이트가 서로 달라도, GET 요청이라면 쿠키 전송 가능
      Strict: 사이트가 서로 다르면, 쿠키 전송 불가능
      None: 사이트가 달라도, 모든(GET, POST, PUT 등) 요청에 대해 쿠키 전송 가능
   

4. session 기반 인증 방식

  • 하나의 서버에서만 접속 상태를 저장
    여러 개의 서버에서 같은 세션 데이터에 접근하려고 한다면 session clustering 혹은 공통 session store를 사용해야 하는 번거로움이 있다. (불가능한 건 아니다)
  • 여러 개의 서버를 가지고 있을 때 유리한 건 token 기반 인증 방식

5. CSRF

  • cross site request forgery
  • 사용자가 보내는 요청을 다른 사이트(origin이 아님)에서 위조하는 것
  • 기존의 로그인한 기록을 바탕으로 서버가 클라이언트의 요청을 믿기 때문에 발생한다.
  • 쿠키 방식의 인증을 사용하는 곳에서 사용 가능. sameSite: 'none'말고 다른걸로 사용하면, 서버는 클라이언트에 따라 신뢰할 수 있는 요청인지 아닌지를 판단할 수 있으므로, CSRF 공격을 방지할 수 있다.
  • 해커는 GET에서 parameter를 바꾸어 변조된 요청을 보내게 할 수 있으며, POST의 경우도 쿼리 문자열 (x- www-form-urlencoded) 변조가 가능하므로 공격할 수 있다. Cross origin의 경우 CORS 설정은 CSRF를 막는 데 도움을 줄 수 있다.

6. session 기반 인증 대신 token 기반 인증 ?

  • session은 유저가 많으면 성능이 떨어짐 (세션 기반 인증은 서버(혹은 DB 통합)에 유저에 대한 정보를 저장하고 있다. 즉 메모리 공간을 서버 쪽에서 차지하고 있고, 자원을 사용하고 있기 때문)
  • token은 서버의 부담을 덜어줄 수 있음
  • token은 여러 개의 서버를 사용하는 서비스를 운영할 때 유리
  • 어느 한쪽이 더 안전한 인증 방식이라고는 얘기할 수 없지만, 앱의 확장을 고려한다면(여러 개의 서버를 사용하며 점점 커져가는 앱이라면), token 기반 인증 사용
profile
I, sum of records.
post-custom-banner

0개의 댓글