JWT 저장 장소
💬 기존에 작성했던 로그인 코드를 리팩터링 하는 과정에서 문득 궁금증이 생겼다. JWT에 Stateless라는 장점을 가진 대신 보안에 취약하다는 단점을 가지고 있는데, 이를 위해 어디에 저장하는 것이 좋을까?
JWT 저장 후보군
✔ 웹 스토리지
💬 웹 스토리지는 XSS(Cross-Site Scripting)에 취약해서 스크립트를 통해서 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에 대한 대응 방안도 적용해 볼 수 있는 것은 해봐야겠다.
'개발일지 > TIL' 카테고리의 다른 글
[231029] S3 데이터 이전하기 (0) | 2023.10.29 |
---|---|
[231022] Mybatis 파라미터 #과 $의 차이 (1) | 2023.10.22 |
[230923] Java PriorityQueue와 Comparator 사용하기 (1) | 2023.09.23 |
[230913] Scale-out 환경에서 Scheduler 중복으로 실행되는 문제 (0) | 2023.09.13 |
[230901] 간단한 화면 구현 (0) | 2023.09.01 |