인증/보안 - cookie, session

jeongjwon·2023년 5월 2일
0

SEB FE

목록 보기
45/56

서버가 일방적으로 클라이언트에 영속성이 있는 데이터를 저장하는 방법
➡️ 무상태성을 가지는 http 대신 cookie가 데이터를 기억하는 것

  • Domain : 쿠키의 도메인 옵션과 서버의 도메인이 일치해야만 쿠키 전송 가능
  • Path : 세부 경로가 일치하거나 설정된 경로를 포함하는 하위 경로로 요청을 해도 쿠키 전송 가능
  • MaxAge or Expires : 유효한 기간 설정하여 설정한 시간(초단위)이나 날짜(유효 날짜) 초과시 쿠키는 자동 파괴 ➡️ 보안면에서 중요
    • 세션 쿠키 : 옵션이 없는 쿠키로 브라우저가 실행 중일 때 사용할 수 있는 임시 쿠키로 브라우저 종료시 쿠키도 삭제
    • 영속성 쿠키 : 브라우저 종료 여부와 상관없이 설정한 유효한 시간만큼 사용가능한 쿠키
  • Secure : 사용하는 프로토콜에 따른 쿠키 전송 여부 결정 옵션, true 일 경우 HTTPS를 이용할 때만 쿠키 전송 가능, 옵션이 없으면 상관없이 모든 쿠키 전송 가능
  • HttpOnly : 스크립트의 쿠키 접근 가능 여부 결정, 옵션이 없으면 기본적으로 false로 지정이 되어 document.cookie 를 이용해 쿠키에 접근할 수 있어 XSS 공격에 취약, true 일 경우 접근 불가
  • SameSite : CORS(Cross-Site) 요청의 경우 옵션 및 메서드에 따라 쿠키 전송 여부 결정
    • Cross-Origin : 서버의 도메인, 프로토콜, 포트가 다른 경우 (같은 경우는 Same-Origin)
    • Cross-Site : eTLD+1(최상위 도메인 TLD 의 바로 왼쪽의 하위 레벨 도메인을 합한 것)이 다른 경우
      • Lax : GET 메서드 요청만 쿠키 전송 가능
      • Strict : 쿠키 전송 불가
      • None : 모든 메서드 요청에 대해 쿠키 전송 가능

  1. 클라이언트가 페이지를 요청한다.
  2. 서버에서 이런 옵션들을 지정하여 쿠키를 생성한다.
  3. 서버에서 http header에 Set-Cookie 프로퍼티로 쿠키를 담아 전송한다.
  4. 브라우저가 종료되어도 쿠키의 유효 시간이 남아있다면 클라이언트에서 보관하고 있는다.
  5. 동일 사이트를 재방문하여 동일한 request가 갈 경우 이미 존재하고 있는 쿠키를 http header로 함께 보낸다.
  6. 서버에서 쿠키를 읽어 이전 상태 정보를 변경할 필요가 있을 때 쿠키를 업데이트 하여 변경된 쿠키를 http header에 포함시켜 응답한다.

➡️ Stateledss 한 인터넷 연결을 Stateful 하게 유지할 수 있다.



[실습]



Session

서버가 클라이언트에게 유일하고 암호화된 ID 를 부여하고 중요 데이터는 서버에서 관리함, 사용자가 인증에 성공한 상태를 말함

  1. 클라이언트가 서버에 접속 시 세션 ID를 발급 받는다.
  2. 클라이언트는 세션 ID에 대해 쿠키를 사용해 브라우저에 저장한다.
  3. 클라이언트는 서버에 요청할 때, 이 쿠키의 세션 ID를 같이 서버에 전달해서 요청한다.
  4. 서버는 세션 ID를 전달받아 세션 ID로 세션에 있는 클라이언트 정보를 가져와서 사용한다.
  5. 클라이언트 정보로 서버 요청을 처리하며 클라이언트에 응답한다.

Session-based Authentication 세션기반 인증

🧩 로그인

  • 사용자가 정확한 아이디와 비밀번호 입력시, 서버는 인증에 성공했다고 판단한다.
  • 서버는 '인증 성공'을 알고 있으면 사용자는 매번 로그인을 할 필요가 없다.
    ➡️ 인증에 따라 리소스 접근권한이 달라진다. ( 서버는 사용자가 인증성공임을 알고 있어야 하고, 클라이언트는 인증 성공 증명 수단을 가지고 있어야 함 )
  • 세션: 사용자가 인증에 성공한 상태 => 서버는 이 세션을 in-memory 나 DB에 저장한다.
  • 세션이 만들어지면 세션을 구분할 수 있는 세션 아이디가 만들어지고 , 클라이언트에 전달한다.
  • 로그인 유지수단으로 쿠키를 사용하는데 쿠키에 세션 아이디를 저장한다.
  • 쿠키를 통해 세션 아이디가 서버에 전달되고, DB에 존재한다면 서버는 해당 요청에 접근 가능하다고 판단한다. 존재하지 않다면 요청이 인증되지 않음을 알려준다.

🧩 로그아웃

  • 클라이언트 측은 세션 아이디(인증 성공 증명 수단)이 담긴 쿠키가 저장
  • 서버 측은 세션을 저장하고 세션 아이디로만 인증 여부 판단
  • 로그아웃 시 , 클라이언트는 쿠키를 변경하거나 삭제하고 , 서버는 세션 정보를 삭제해야한다.


Cookie 들은 클라이언트 측에 저장되고
Session은 쿠키를 기반으로 하나 서버 측에 관리된다.

항목쿠키세션설명
저장위치브라우저서버
보안세션은 서버에 저장되어 세션 ID만 로컬에 저장하고 처리는 서버에서 하기 때문에 비교적 보안성이 좋다.
속도세션은 서버의 처리가 필요하기 때문에 느리다.
라이프 사이클브라우저를 종료해도 저장될 수 있다.만료시간을 설정하거나 세션 ID를 날려 참조할 수 없게 지울 수 있다.

쿠키 대신 세션을 사용하면 되는 거 아닌가요? 아니다.
세션은 서버의 자원을 사용하기 때문에 무분별하게 만들면 서버의 메모리가 감당할 수 없어서 속도가 느려질 수 있어 쿠키가 유리한 경우가 있다.

0개의 댓글