어떤 기능인가요?
카카오 로그인 후 토큰을 받은 후 관리합니다.
작업 상세 내용
참고할만한 자료(선택)
Authorization token을 저장할 때 보안성과 기능 구현의 적합성을 고려해야 합니다. 각 저장소의 특성과 장단점을 살펴보면 다음과 같습니다.
- Cookie
장점: HTTPOnly 및 Secure 플래그를 설정하면 JavaScript에서 접근할 수 없으므로 XSS 공격에 대한 저항력이 높습니다. SameSite 속성을 설정하여 CSRF 공격을 방지할 수 있습니다.
단점: 서버 측에서 관리해야 하며, 클라이언트에서 직접 접근할 수 없습니다. 쿠키 크기 제한이 있어 큰 데이터를 저장하기 어렵습니다.
- 전역 상태 관리 툴 (예: Redux, Justand 등)
장점: 애플리케이션의 상태를 중앙에서 관리할 수 있어 상태 변경이 용이합니다.
컴포넌트 간의 데이터 공유가 간편합니다.
단점: 페이지 새로 고침 시 상태가 초기화되므로, 지속적인 저장이 필요합니다. XSS 공격에 취약할 수 있습니다.
- localStorage
장점: 클라이언트 측에서 쉽게 접근할 수 있으며, 데이터가 브라우저에 영구적으로 저장됩니다. 크기 제한이 상대적으로 큽니다.
단점: XSS 공격에 취약하여, 악성 스크립트가 접근할 수 있습니다. 보안 설정이 없으므로, 민감한 정보를 저장하기에는 부적합합니다.
- sessionStorage
장점: 현재 세션 동안만 데이터를 저장하므로, 브라우저 탭을 닫으면 데이터가 사라집니다. localStorage보다 보안적으로 조금 더 안전할 수 있습니다.
단점: 페이지 새로 고침 시에도 데이터가 유지되지만, 탭을 닫으면 사라지므로 지속적인 저장이 필요할 경우 불편합니다. XSS 공격에 취약합니다.
결론
가장 보안적으로 우수하고 기능 구현에 적합한 방법은 HTTPOnly 쿠키입니다. 쿠키에 Secure 및 SameSite 속성을 설정하면 XSS 및 CSRF 공격에 대한 저항력을 높일 수 있습니다.
전역 상태 관리 툴은 상태 관리에 유용하지만, 보안적인 측면에서는 쿠키에 비해 취약합니다. localStorage와 sessionStorage는 XSS 공격에 취약하므로 민감한 정보를 저장하는 데는 적합하지 않습니다.
따라서, 보안과 기능을 모두 고려할 때 HTTPOnly 쿠키를 사용하기로 결정했습니다.
https://blog.logrocket.com/javascript-developer-guide-browser-cookies/
https://blog.logrocket.com/guide-cookies-next-js/
https://www.mintmin.dev/blog/2403/20240316
https://www.mintmin.dev/blog/2403/20240331
https://www.npmjs.com/package/cookies-next
어떤 기능인가요?
작업 상세 내용
참고할만한 자료(선택)
Authorization token을 저장할 때 보안성과 기능 구현의 적합성을 고려해야 합니다. 각 저장소의 특성과 장단점을 살펴보면 다음과 같습니다.
장점: HTTPOnly 및 Secure 플래그를 설정하면 JavaScript에서 접근할 수 없으므로 XSS 공격에 대한 저항력이 높습니다. SameSite 속성을 설정하여 CSRF 공격을 방지할 수 있습니다.
단점: 서버 측에서 관리해야 하며, 클라이언트에서 직접 접근할 수 없습니다. 쿠키 크기 제한이 있어 큰 데이터를 저장하기 어렵습니다.
장점: 애플리케이션의 상태를 중앙에서 관리할 수 있어 상태 변경이 용이합니다.
컴포넌트 간의 데이터 공유가 간편합니다.
단점: 페이지 새로 고침 시 상태가 초기화되므로, 지속적인 저장이 필요합니다. XSS 공격에 취약할 수 있습니다.
장점: 클라이언트 측에서 쉽게 접근할 수 있으며, 데이터가 브라우저에 영구적으로 저장됩니다. 크기 제한이 상대적으로 큽니다.
단점: XSS 공격에 취약하여, 악성 스크립트가 접근할 수 있습니다. 보안 설정이 없으므로, 민감한 정보를 저장하기에는 부적합합니다.
장점: 현재 세션 동안만 데이터를 저장하므로, 브라우저 탭을 닫으면 데이터가 사라집니다. localStorage보다 보안적으로 조금 더 안전할 수 있습니다.
단점: 페이지 새로 고침 시에도 데이터가 유지되지만, 탭을 닫으면 사라지므로 지속적인 저장이 필요할 경우 불편합니다. XSS 공격에 취약합니다.
결론
가장 보안적으로 우수하고 기능 구현에 적합한 방법은 HTTPOnly 쿠키입니다. 쿠키에 Secure 및 SameSite 속성을 설정하면 XSS 및 CSRF 공격에 대한 저항력을 높일 수 있습니다.
전역 상태 관리 툴은 상태 관리에 유용하지만, 보안적인 측면에서는 쿠키에 비해 취약합니다. localStorage와 sessionStorage는 XSS 공격에 취약하므로 민감한 정보를 저장하는 데는 적합하지 않습니다.
따라서, 보안과 기능을 모두 고려할 때 HTTPOnly 쿠키를 사용하기로 결정했습니다.
https://blog.logrocket.com/javascript-developer-guide-browser-cookies/
https://blog.logrocket.com/guide-cookies-next-js/
https://www.mintmin.dev/blog/2403/20240316
https://www.mintmin.dev/blog/2403/20240331
https://www.npmjs.com/package/cookies-next