본문 바로가기

개발일지/TIL

[231008] JWT는 어디에 저장을 해야할까?

JWT 저장 장소 

💬 기존에 작성했던 로그인 코드를 리팩터링 하는 과정에서 문득 궁금증이 생겼다. JWT에 Stateless라는 장점을 가진 대신 보안에 취약하다는 단점을 가지고 있는데, 이를 위해 어디에 저장하는 것이 좋을까?

JWT 저장 후보군

✔ 웹 스토리지

💬 웹 스토리지는 XSS(Cross-Site Scripting)에 취약해서 스크립트를 통해서 JWT가 쉽게 탈취될 수 있다는 문제를 가지고 있다. 실제로 스크립트를 통해서 토큰 확인이 가능한지 아래와 같이 테스트를 해보았다.

 

스크립트를 통해 세션, 로컬 스토리지 JWT 확인

 

✔ 쿠키

💬 그에 반해 쿠키는 간단한 설정으로 XSS(Cross-Site Scripting)을 막을 수 있다. 하지만 CSRF(Cross Site Request Forgery)에는 취약하다는 문제가 있다.

 

결론

💬 보안적인 측면에서 XSS를 막아줄 수 있는 쿠키를 사용하는 것이 맞는 것 같다. 쿠키에서 생길 수 있는 다른 보안적인 이슈를 대비하는 방법을 더 추가하더라도 말이다.

 

Cookie cookie = new Cookie("authorization",accessToken);
cookie.setSecure(true);
cookie.setHttpOnly(true);
cookie.setPath("/");

생각

💬 보안은 너무 어렵다. 하나를 고려하면 또 다른 보안적인 이슈가 있는 것 같다. 그리고 거기에 따른 대비책을 적용해야 하기 때문이다. 어렵지만 해야 한다. 개발자는 자신이 만든 코드에 대한 보안적 이슈도 책임질 수 있어야 하기 때문이다. 리팩토링 하면서 CSRF에 대한 대응 방안도 적용해 볼 수 있는 것은 해봐야겠다.