쿠키, 세션 인증방식

Creating the dots·2021년 10월 20일
0

Authentication

목록 보기
1/3

해시

  • 모든 값에 대해 해시값을 계산하는데 오래 걸리지 않아야 한다
    • 유저가 로그인할때 id와 pw를 서버에서 확인하고 데이터베이스에서 데이터를 가져오는데 시간이 오래걸린다면? 유저들이 떠나갈 것이다
  • 최대한 해시값을 피해야하며, 모든 값은 고유한 해시값을 가진다
    • 해시값의 길이가 한정되고, 입력값의 길이는 제한되지 않은 경우, 극히 드문 확률로 다른 입력값에 대해 동일한 해시값을 가질 수 있다.
  • input이 같으면 output이 늘 똑같다
  • 아주 작은 단위의 변경이라도 완전히 다른 해시값을 가져야한다
    • aaab와 aaac의 해시값은 완전히 달라야한다.

https://emn178.github.io/online-tools/sha256.html


솔트

암호화해야하는 값에 어떤 '별도의 값'을 추가하여 결과를 변형하는 것

특징

  • 입력값에 대한 해시값은 늘 동일하므로 해시값과 입력값을 테이블(레인보우 테이블)로 만들어서 decoding하는 경우도 있다
  • 입력값(ex.비밀번호)에 솔트를 추가해 해시값을 만들면, 기존 입력값과 전혀 다른 해시값이 생성되므로 알고리즘(해시함수)이 노출되더라도 원본값을 보호할 수 있다

사용시 주의점

  • salt는 유저와 패스워드 별로 유일한 값을 가져야 한다
  • 사용자 계정을 생성할때와 비밀번호를 변경할때마다 새로운 임의의 salt를 사용해서 해싱해야한다
  • salt는 재사용해서는 안된다
  • salt는 데이터베이스 유저 테이블에 같이 저장되어야한다

쿠키

HTTP는 stateless한 특징을 갖는다. 이는 요청과 응답의 상태를 관리하지 않는다는 의미이다. 예를 들어 유저가 로그인을 했더라도 새로운 페이지로 이동하면 그때마다 다시 로그인을 해야한다. 따라서 HTTP의 무상태성을 보완하기 위한 방법이 바로 쿠키이다.

쿠키란, 서버가 일방적으로 브라우저에 저장하는 작은 데이터로, 해당 도메인에 대한 쿠키가 존재하면, 브라우저는 도메인에게 http 요청 시 쿠키를 함께 전달한다. 따라서 서버는 클라이언트에 대해 남긴 기록들(쿠키)를 보고 어느 클라이언트가 접속했는지 체크하고, 서버상의 기록을 확인해서 이전 상태를 알 수 있다.

쿠키 이용법

서버는 쿠키로 어떤 정보를 브라우저에 저장하고 싶은걸까?

  • 쿠키는 삭제하지 않는다면 사라지지 않는다는 특징이 있어 사용자 선호, 테마, 장바구니 상품 등 장시간 보존해야하는 정보 저장에 적합하다

요청과 응답에 쿠키 담기

요청(클라이언트)응답(서버)
헤더필드 set-cookiecookie
  • set-cookie 필드속성
속성설명
NAME = VALUE쿠키에 부여된 이름과 값(필수)
expires = DATE쿠키 유효기간(지정되지 않은 경우 브라우저를 닫을 때까지)
path = PATH쿠키 적용 대상이 되는 서버 상의 디렉토리(지정하지 않은 경우는 도큐먼트와 같은 디렉토리)
Domain=도메인 명쿠키 적용 대상이 되는 도메인 명(지정하지 않은 경우는 쿠키를 생성한 서버의 도메인)
secure = BOOLEANHTTPS로 통신하고 있는 경우에만 쿠키를 송신
httpOnly = BOOLEAN쿠키를 자바스크립트에서 액세스하지 못하도록 제한
sameSite = LAX, STRICT, NONECORS 요청의 경우 옵션 및 메소드에 따라 쿠키 전송 여부 결정

세션인증과정

클라이언트에 정보를 저장하는 쿠키와 다르게, 세션은 데이터를 서버에 저장하고 쿠키에는 데이터에 대한 아이디만 암호화된 상태로 저장한다.

세션인증의 단점

  • 세션은 서버 메모리의 일정부분을 항상 차지하므로 가용메모리 용량이 줄어들어 서버 성능이 떨어질 수 있다.

  • 기존 쿠키를 완전히 대체한 것이 아니라 여전히 쿠키를 사용하고 있으므로 쿠키가 httpOnly 요청이 없다면 XSS 요청에 취약한 것과 마찬가지로 XSS 공격으로 인한 쿠키 탈취가 일어날 수 있다.

참고

profile
어제보다 나은 오늘을 만드는 중

0개의 댓글