해결된 질문
21.05.21 21:48 작성
·
2.3K
1
안녕하세요 강의 재밌게 보고 있습니다.
제가 프론트엔드에는 무지하여 잘 모르겠는데 jwt 를 서버에서
반환해주면 프론트에서는 일반적으로 어디에 저장을 하다가
요청 보낼때 마다 재사용하나요?
로컬 스토리지나 쿠키 정도 밖에 떠오르는게 없는데 프론트엔드 현업에서 자주 사용하는 방식이 있나요?
답변 4
8
2021. 05. 24. 06:13
안녕하세요, 이도원입니다.
JWT는 사용자 브러우저 냉의 안전한 장소에 저장되어야 합니다. LocalStorage에 저장하게 되면, 페이지 내부의 모든 스크립트에서 엑세스 할 수 있기 때문에, XSS의 공격 대상이 되거나 외부 공격자가 토큰에 접근할 수도 있게 됩니다. 따라서, LocalStorage나 SessionStorage에 저장하는 것은 좋은 방법이 아니라고 생각됩니다.
JWT는 HTTP 요청으로만 서버에 전송되는 HttpOnly 쿠키 내에 저장되어야 합니다. 예를 들어, 다음과 같이 저장해 볼 수 있습니다.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies
감사합니다.
1
지식 공유 감사합니다. 하지만 읽어보니 XSS 공격을 회피하기 위해 Local Storage 사용을 자제하고 Http Only와 같은 방법을 채택하는 여러가지 조언들도 XSS 공격에서 자유로울 수 없다. 그렇기 때문에 Local Storage의 편리함을 생각했을 때, 큰 차이가 없다는 의미인 것 같습니다.
하지만 본문에서도 Local Storage는 매우 쉽게 훔칠 수 있는 반면, 다른 방법들이 궁극적으로는 피할 수 없지만 어렵게는 만든다고 하는 것 같습니다. 그렇기에 스크립트 접근과 훔치는 난이도를 생각하면, Local Storage가 더 안전하다는 표현만은 ChatGPT도 그렇고 저도 적절한 표현은 아니라는 생각이 듭니다.
그럼에도 토큰 방식이 보안을 위해 여러가지 고려할 사항이 많은 것은 사실인 것 같습니다. 그래서 추천하신 것처럼 세션이 토큰에 비해 안전하긴 한데, 트래픽 처리나 모바일 어플리케이션 등에서 토큰 방식을 필요로 하니까 여러 모로 개발하기가 쉽지만은 않네요.
1
2023. 02. 07. 23:48
+저는 그리고 차라리 세션을 추천합니다.
Stop using JWT for sessions - joepie91's Ramblings (cryto.net)