Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

요리사에서 IT개발자로

JWT 어디에 보관해야할까?? (LocalStorage, SessionStorage, Cookie) 본문

TIL

JWT 어디에 보관해야할까?? (LocalStorage, SessionStorage, Cookie)

H.S-Backend 2024. 9. 5. 15:32

추천: HTTP-Only Cookie + CSRF 보호

이 방식은 가장 강력한 보안 옵션을 제공하며, 브라우저에서 JavaScript로 토큰을 탈취할 수 없도록 방지하면서도 자동으로 HTTP 요청에 토큰을 첨부할 수 있습니다.

 

1. LocalStorage

LocalStorage는 브라우저의 로컬 저장소로, 클라이언트가 데이터를 영구적으로(브라우저가 닫혀도 유지) 저장할 수 있는 공간입니다.

장점:

  • 영구적 저장: 브라우저를 닫아도 데이터가 유지됩니다.
  • 간편한 사용: JavaScript로 쉽게 데이터를 저장하고 접근할 수 있습니다.

단점:

  • XSS(크로스 사이트 스크립팅) 공격에 취약: LocalStorage는 JavaScript에서 쉽게 접근할 수 있기 때문에, XSS 공격이 발생하면 악성 스크립트가 JWT 토큰을 탈취할 수 있습니다.
  • 보안 민감 데이터 저장 부적합: 토큰이 노출되면 공격자가 이를 재사용해 인증된 리소스에 접근할 수 있습니다.

언제 사용해야 할까?

  • 토큰이 탈취되더라도 심각한 위험이 없거나, 엄격한 보안 요구 사항이 없는 경우.
XSS(Cross-Site Scripting, 크로스 사이트 스크립팅)
공격자가 악성 스크립트를 웹 페이지에 주입하여 다른 사용자의 브라우저에서 실행되도록 하는 보안 취약점입니다.
주로JavaScript와 같은 클라이언트 측 스크립트를 악용하여, 사용자의 세션, 쿠키, 로컬 스토리지에 저장된 데이터 등을 탈취하거나, 피해자의 브라우저에서 악성 행위를 수행할 수 있습니다.

 

2. SessionStorage

SessionStorage는 LocalStorage와 유사하지만, 세션이 종료되면 데이터가 사라집니다. 브라우저가 닫히면 데이터가 삭제됩니다.

장점:

  • 브라우저 세션에 한정: 브라우저가 닫히면 데이터가 삭제되어, 세션 동안만 토큰을 유지합니다.
  • 간편한 사용: LocalStorage와 마찬가지로 쉽게 접근할 수 있습니다.

단점:

  • XSS 공격에 취약: LocalStorage와 동일하게 XSS 공격에 취약합니다. 공격자가 악성 스크립트를 주입하면 JWT 토큰을 탈취할 수 있습니다.
  • 세션 만료: 브라우저를 닫으면 세션이 종료되어 토큰이 삭제됩니다.

언제 사용해야 할까?

  • 사용자가 브라우저를 닫으면 인증 상태를 유지할 필요가 없고, 토큰을 세션 동안만 사용할 경우.

 

3. HTTP-Only Cookie

HTTP-Only Cookie는 JavaScript에서 접근할 수 없고, 오직 서버에서 HTTP 요청 시에만 사용 가능한 쿠키입니다.

장점:

  • XSS 공격으로부터 보호: JavaScript에서 쿠키에 직접 접근할 수 없으므로, XSS 공격에 대한 방어가 가능합니다.
  • 자동 전송: 브라우저가 자동으로 HTTP 요청에 쿠키를 포함하므로, 별도로 토큰을 요청 헤더에 첨부할 필요가 없습니다.
  • 보안 강화 옵션: SameSite, Secure와 같은 추가적인 보안 옵션을 설정할 수 있어, 특정 조건에서만 쿠키가 전송되도록 할 수 있습니다.

단점:

  • CSRF(크로스 사이트 요청 위조) 공격에 취약: 쿠키는 모든 도메인에 대해 전송되므로, 다른 도메인에서 위조된 요청을 보낼 수 있습니다. 이를 방지하려면 CSRF 보호 메커니즘이 필요합니다.
  • 스토리지 크기 제한: 쿠키는 데이터 저장 용량이 제한적입니다.

언제 사용해야 할까?

  • XSS 공격에 대한 우려가 크고, CSRF 보호를 추가할 수 있는 경우.
  • 보안이 중요한 애플리케이션에서 토큰을 안전하게 저장해야 할 때.

 

결론

선택 가이드라인:

  • 보안이 최우선일 때: HTTP-Only Cookie가 가장 안전한 선택입니다. 쿠키에 저장된 토큰은 JavaScript에서 접근할 수 없으므로, XSS 공격에 대해 안전합니다. 하지만 CSRF 공격을 방어할 수 있는 추가적인 보호 메커니즘(CSRF 토큰 또는 SameSite 옵션 설정)이 필요합니다.
  • 간편하고 영구적인 저장을 원할 때: LocalStorage는 XSS 공격에 취약하지만, 간단하고 브라우저 간 데이터를 쉽게 유지할 수 있는 방법입니다. 만약 XSS 공격 가능성을 줄이는 데 충분한 보안이 적용되어 있다면, LocalStorage를 사용할 수 있습니다.
  • 짧은 인증 세션이 필요한 경우: SessionStorage 또는 In-Memory 방식이 적합합니다. 페이지가 닫히면 인증 상태가 사라지므로, 민감한 데이터에 대한 보호가 강화됩니다.

 

 

https://hs-backend.tistory.com/233

 

(스파르타 코딩클럽) 스프링 시큐리티에서 JWT토큰 인증을 어떻게 할까?

백엔드에서 정의한 WebSecurityConfig클래스에 permitAll 이 아닌 URI로 접근을 할 경우 인증절차가 되는 방법을 알아보고자 한다. .authorizeHttpRequests(authorize -> authorize .requestMatchers(HttpMethod.POST, "/api/**").p

hs-backend.tistory.com

https://hs-backend.tistory.com/225

 

(스파르타 코딩클럽)브라우저의 작동방식

웹 브라우저(Web Browser)웹서버에서 양방향으로 통신을 하며 HTML 문서, 멀티미디어 등의 컨텐츠를 열람할 수 있게 해주는 GUI기반의 소프트 웨어 프로그램브라우저는 페이지를 다운로드 하기 위해

hs-backend.tistory.com

반응형