ougi FE

토큰 관리 어떻게 해야지 안전할까? 본문

카테고리 없음

토큰 관리 어떻게 해야지 안전할까?

ougi 2025. 3. 22. 17:04
728x90

저는 예전부터 하던 생각이 있었습니다 무심코 아무 곳에서나 토큰 관리를 한다면 토큰을 탈취 당할 수 있지 않을까?

그래서 저는 보안쪽을 잘 모르기 때문에 오늘은 토큰 관리를 어디서 해야 안전할까 라는 주제로 알아보고

저의 생각을 이야기 해보겠습니다 


XSS 공격? CSRF 공격?

일단 토큰을 탈취하기 위한 방법은 두가지정도가 있다고 하는데

그 두가지가 XSS(Cross Site Scripting) 공격과 CSRF(Cross-Site Request Forgery) 공격이라고 합니다

 

XSS 공격이란?

XSS 공격이란 보안이 취약한 웹사이트에 악의적인 스크립트를 걸어놓고 사용자가 이 스크립트를 강제로 실행하게끔 유도하는 방법입니다

 

예시

  1. 웹사이트 게시물에 태그를 넣어두고 클릭을 유도합니다
  2. 클릭 시 스크립트가 실행되면서 사용자의 저장소에 접근하여 토큰을 탈취합니다

CSRF 공격이란?

CSRF 공격이란 인터넷 사용자가 자신의 의지와 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 만드는 공격방법입니다

정상적인 request을 중간에 가로채서 변조하여 request를 보냅니다

피해자의 정보를 수정하거나 열람할 수 있습니다

img 태그나 link로도 사용자 브라우저에서 악의적인 request를 보낼 수 있기 때문에

사용자 브라우저의 js를 조작하는 xss와 성격이 다르다고 합니다

 

예시

  1. 공격자가 유저가 img를 열람하게 하거나 link를 클릭하도록 유도합니다
  2. 사용자의 의도와는 관계없이 http request가 보내지게 됩니다
  3. 유저가 로그인이 되어있는 상태라면 이 request는 정상적으로 서버에 동작을 수행합니다

토큰 관리

이렇게 두가지 방법을 알아보았는데 어디에 JWT 토큰을 관리해야할지 이제 고민해봅시다

총 3가지 정도의 방법이 있을거 같습니다

  • Local Storage
  • Session Storage
  • Cookie
  • 전역 상태 관리 도구

Session Storage, Local Storage, 전역 상태 관리 도구

Session Storage, Local Storage, 전역 상태 관리 도구는 JavaScript 코드에 의해서만 엑세스할 수 있다고 합니다

그래서 위에서 이야기했던 XSS 공격엔 취약하고 CSRF 공격에는 공격에는 안전하다고 합니다

 

Cookie (httpOnly)

위에 말했던 3개의 저장 방법에 비해서 XSS 공격에 안전하다고 합니다 

하지만 CSRF 공격에는 취약합니다

쿠키도 JavaScript로 접근할 수 있지만 서버에서 httpOnly 플래그 설정 시 JavaScript로 접근할 수 없다고 합니다

 

하지만 쿠키는 CSRF 공격에 취약합니다

자동으로 request와 같이 보내지는 쿠키의 특성상 사용자가 link를 클릭하도록 만들어 쉽게 request를 위조할 수 있습니다

하지만 이 문제를 해결하기 위해서 SameSite라는 속성이 존재한다고 합니다

속성은 쿠키가 다른 사이트의 요청에서 자동으로 전송되지 않도록 설정할 수 있습니다


글을 마치며

이렇게 탈취 방법을 알아보았는데 저의 개인적인 생각으로는 백엔드에서 httpOnly, SameSite 속성을 설정해준 Cookie로 토큰 관리를 하는 것이 제일 안전하다고 생각하였습니다

XSS, CSRF 방법을 다 예방하여 안전하게 토큰을 관리해봅시다!!!

728x90