CS/Network

인증과 쿠키

oxdjww 2023. 10. 5. 02:33
728x90
반응형

Intro

본 포스팅에서는 인증(Authorization)과 쿠키(cookie)에 대해 다룬다.

인증이란?

  • Authorization: 클라이언트 인증 정보를 서버에 전달하는 것이다.
  • WWW-Authenticate: 리소스 접근시 필요한 인증 방법을 정의한다.

Authorization


클라이언트측에서 클라이언트 인증 정보를 서버에 전달한다.

  • 요청시 사용한다.
  • Auth 등 다양한 인증 방식마다 value에 들어가는 값은 상이하다.

WWW-Authenticate


서버측에서 리소스 접근시 필요한 인증 방법을 정의한다.

  • 401 Unauthorized 응답시 함께 사용한다.
  • WWW-Authenticate: Newauth realm="apps", type=1, title="Login to \"apps\"", Basic realm="simple"

쿠키란?

서버에서 제공하고 클라이언트에 저장되는 자원으로, 클라이언트가 웹 사이트(혹은 서비스)에 방문할 경우 재사용을 위해 저장되는 정보를 말한다.

  • Set-Cookie: 서버에서 클라이언트로 쿠키 전달(응답패킷에서)
  • Cookie: 클라이언트가 서버에서 받아 저장해놓은 쿠키를 HTTP 요청시 서버에게 전달

쿠키 미사용시


처음 welcome 페이지 접근

처음 welcome page에 접속하면 로그인이 되어있지 않아 '손님'으로 서버가 응답한다.

로그인

로그인을 마치면 '홍길동'으로 표기된다.
즉, 인증이 완료된 것이다.

로그인 이후 welcome 페이지 접근

하지만 다시 welcome page에 접속하면 다시 '손님'으로 표기된다.

Stateless한 HTTP

- HTTP는 무상태(Stateless) 프로토콜이다.
- 클라이언트와 서버가 요청과 응답을 주고 받으면 연결이 끊어진다. 
- 클라이언트가 다시 요청하면 서버는 이전 요청을 기억하지 못한다. 
- 클라이언트와 서버는 서로 상태를 유지하지 않는다.

쿠키 미사용시 대안


모든 요청에 사용자 정보 포함

모든 요청 정보에 사용자 정보를 포함하는 방법을 생각할 수 있다.

모든 요청에 정보를 넘기는 문제

  • 모든 요청에 정보를 포함하면 오버헤드가 있을 수 있다.
  • 모든 요청에 사용자 정보가 포함되도록 개발해야 한다.
  • 브라우저를 완전히 종료하고 열면 정보가 사라진다.

쿠키 사용시


로그인

처음 로그인 요청을 하고, 로그인 요청에 대한 응답으로 쿠키가 같이 온다.
클라이언트는 쿠키 저장소에 쿠키를 저장한다.

로그인 이후 welcome 페이지 접근

다음 접속 시 클라이언트는 쿠키 저장소에 있는 쿠키를 조회하여 요청에 활용한다.
그 결과, 쿠키를 바탕으로 서버가 클라이언트를 인식할 수 있다.

모든 요청에 쿠키 정보 자동 포함

모든 요청에 쿠키는 자동으로 포함된다.

쿠키 특징

  • e.g.) set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure
  • 사용처
    • 사용자 로그인 세션 관리
    • 광고 정보 트래킹
  • 쿠키 정보는 항상 서버에 전송됨
    • 네트워크 트래픽 추가 유발
    • 최소한의 정보만 사용(세션id, 인증 토큰)
    • 서버에 전송하지 않고, 웹 브라우저 내부에 데이터를 저장하고 싶으면 웹 스토리지 (localStorage, sessionStorage) 참고
  • 주의!
    • 보안에 민감한 데이터는 저장하면 안됨(주민번호, 신용카드 번호 등등..)

쿠키 - 생명주기

Expires, max-age


set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure

  • Set-Cookie: expires=Sat, 26-Dec-2020 04:39:21 GMT
    • 만료일이 되면 쿠키 삭제
  • Set-Cookie: max-age=3600 (3600초)
    • 0이나 음수를 지정하면 쿠키 삭제
  • 세션 쿠키: 만료 날짜를 생략하면 브라우저 종료시 까지만 유지 영속 쿠키: 만료 날짜를 입력하면 해당 날짜까지 유지

쿠키 - 도메인

Domain


set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure

  • e.g. domain=example.org
  • 명시:명시한문서기준도메인+서브도메인포함
    • domain=example.org를 지정해서 쿠키 생성
      • example.org는 물론이고
      • dev.example.org도 쿠키 접근
  • 생략:현재문서기준도메인만적용
    • example.org 에서 쿠키를 생성하고 domain 지정을 생략
      • example.org 에서만 쿠키 접근
      • dev.example.org는 쿠키 미접근

쿠키 - 경로

Path


set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure

  • 이 경로를 포함한 하위 경로 페이지만 쿠키접근 가능
  • 일반적으로 path=/ 루트로 지정
  • e.g.
    • path=/home 지정 시,
      • /home -> 접근 가능
      • /home/level1 -> 접근 가능
      • /home/level1/level2 -> 접근 가능
      • /hello -> 접근 불가능

쿠키 - 보안

Secure, HttpOnly, SameSite


set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure

  • 쿠키는 http, https를 구분하지 않고 전송

  • Secure

    • Secure를 적용하면 https인 경우에만 전송
  • HttpOnly

    • XSS 공격 방지

      • 공격자는 XSS 공격으로 자바스크립트 코드(악성 스크립트)로 쿠키에 접근하여 이를 악용할 수 있다.
      • HttpOnly를 적용하면 자바스크립트에서 접근 불가하기 때문에 공격 방지가 가능하다.(document.cookie)
    • HTTP 전송에만 사용

  • SameSite

    • XSRF(CSRF) 공격 방지

      CSRF 공격은 공격자가 특정 웹 애플리케이션을 희생자의 명의로 조작하도록 하는 공격이다
      일반적으로 공격자는 희생자의 브라우저에서 악의적인 요청을 실행시키기 위해 특정 조건을 만족하는 자바스크립트 코드를 이용한다.
      Samesite는 브라우저가 쿠키를 어떻게 처리할지 지정하는 데 사용된다.
    • SameSite=None: SameSite 제한 없이 모든 사이트에서 요청에 사용할 수 있게 한다.

    • SameSite=Lax: SameSite 속성을 포함하지 않은 GET 요청에서만 전송할 수 있도록 제한하여 보통 정도의 보안 수준을 제공한다.

    • SameSite=Strict: SameSite 속성을 포함하지 않은 모든 요청에서 전송하지 않도록 엄격하게 제한하여 높은 보안 수준을 제공한다.

      SameSite는 이렇게 쿠키의 사용을 제한하며 쿠키가 악용(및 도용)될 수 있는 원인을 차단함으로써 보안 기능을 제공한다.



감사합니다.

Ref

모든 개발자를 위한 HTTP 웹 기본 지식, 인프런 김영한 강사님

728x90
반응형

'CS > Network' 카테고리의 다른 글

검증 헤더와 조건부 요청1  (0) 2023.10.07
캐시 기본 동작  (0) 2023.10.07
일반 정보, 특별한 정보  (0) 2023.10.04
HTTP 전송 방식  (0) 2023.10.04
표현(Representation)과 협상(Negotiation)  (0) 2023.10.04