SpringBoot/개념정리

Jwt를 저장하는 방식

공부 기록장 2025. 1. 7. 20:22

토큰은 일반적으로 쿠키, 세션스토리지, 로컬 스토리지, 로컬변수 등에 저장한다.

사용자의 토큰을 탈취당하지 않게 하기 위해 어떤 방식을 사용할 지 선택해야한다.

 

1. 쿠키에 저장하는 경우

특징

  • 브라우저에서 HTTP 요청 시 자동으로 서버로 전송됩니다.
  • 보안 옵션(HttpOnly, Secure, SameSite)을 통해 공격 방지 가능.

장점

  • 자동 전송: 브라우저가 쿠키를 자동으로 서버로 전송하므로 추가 코드 없이 편리.
  • HttpOnly 보호: JavaScript로 접근할 수 없어 XSS 공격에 강함.
  • 옵션 강화 가능: Secure와 SameSite로 보안을 강화할 수 있음.

단점

  • CSRF 취약: 기본적으로 CSRF에 취약하며 추가 보호 장치가 필요.
  • 쿠키 크기 제한: 브라우저 별로 쿠키 크기에 제한(보통 4KB)이 있음.
  • 설정 복잡성: 적절한 보안 옵션을 설정하지 않으면 위험할 수 있음.

2. 로컬 스토리지에 저장하는 경우

 

  • 특징:
    • 브라우저가 종료되어도 데이터가 유지됩니다.
    • 쉽게 사용 가능하며, 클라이언트 측에서 직접 접근 가능.
  • 장점:
    • 구현이 간단하며 JavaScript 코드에서 접근이 쉬움.
    • 토큰이 인증 헤더에 바로 추가 가능.
  • 단점:
    • XSS 공격에 취약: 악성 스크립트가 실행되면 localStorage에서 토큰을 탈취할 수 있음.

 


3. 세션 스토리지에 저장하는 경우

 

  • 특징:
    • 브라우저 탭이나 창이 닫히면 데이터가 삭제됩니다.
    • 한 세션 동안만 데이터가 유지됩니다.
  • 장점:
    • localStorage와 유사하며, XSS에 대해 일부 완화 가능(사용자가 창을 닫으면 데이터 손실).
  • 단점:
    • 여전히 XSS 공격에 취약.

 


4. 로컬 변수에 저장하는 경우

특징

  • 애플리케이션에서 실행되는 동안만 존재하며 메모리에서 관리.
  • 데이터는 함수나 애플리케이션의 라이프사이클이 끝나면 사라짐.

장점

  • 보안성: JavaScript로 접근할 수 없으므로 XSS에 매우 강함.
  • 짧은 수명: 토큰이 메모리에만 존재하므로 세션 종료 시 자동 삭제.
  • CSRF 방지: 쿠키와 달리 자동으로 서버로 전송되지 않아 CSRF에 강함.

단점

  • 편의성 부족: 앱 종료 시 데이터 소멸. 장기 인증에 부적합.
  • 새로고침 문제: 브라우저 새로고침 시 데이터 손실.

 

 

 

XSS(Cross-site Scripting) : 공격자가 악성 스크립트를 웹사이트에 주입하여 해당 웹 사이트를 방문한 사용자의 브라우저에서 실행되도록 만드는 공격이다. 쉽게 말하면 공격자가 사용자의 브라우저에 악성 코드를 심는 것이다.

 

CSRF(Cross-Site Request Forgery) : 공격자가 사용자의 인증 정보를 악용해서 사용자가 원하지 않는 요청을 하도록 만드는 공격이다. 쉽게 말하면 사용자를 속여서 몰래 공격자가 원하는 요청을 실행하는 것이다.