개발자
안녕하세요! 프론트엔드 공부하고 있는 취준생입니다. 토큰에 대해 이해가 안되는 것이 있어서 질문을 올립니다. 토큰은 복호화, 암호화와 달리 서명을 통해 무결성을 확인하는 것으로 알고 있는데요, 이를 통해 토큰을 로컬스토리지나 전역 상태 라이브러리등을 사용하여 저장하는 걸로 배웠습니다. 로컬스토리지나 전역 상태 라이브러리를 사용하는 것이 클라이언트에 노출하는 것이랑 보안적으로 다른 것인가요? 사실 이것이 어떻게 안전한 것인지 의아해서 질문을 올립니다. 토큰도 결국 string 문자열일 뿐이고, 이를 복사하여 서버 데이터에서 유저 정보를 빼낼 수 있지 않나요?
답변 1
완전한 서버 사이드 인증 시스템이 아니면 사실 보안성은 떨어집니다. 보안성을 낮추는 대신 소프트웨어 아키텍쳐 상 챙겨가는 이점이 몇 가지 있기 때문에 trade-off를 하는 것이죠. 토큰은 보통 로컬이나 세션 스토리지에 저장하곤 합니다. 하지만 이 방식은 자바스크립트로 토큰을 빼가는 XSS 공격에 대응하기 어렵습니다. 그래서 cookie에 토큰을 담으면서 Http-Only 옵션을 사용하고, 추가적으로 HTTPS까지 활성화 시킵니다. 이것만으로는 보안성이 높다고 하긴 어렵기 때문에, 정말 다양한 방법을 동원해 보안성을 높입니다. 언급해드린 방안은 쿠키를 사용하니까, CSRF 도입처럼 쿠키 관련 보안 방법을 많이 고려할 수 있겠죠. 클라이언트에 노출되는 토큰이기에 지금처럼 의심을 한가득 가지고 대응할 수 있는 방법을 찾아보시면 좋을 것 같습니다!
박정우
작성자
프론트엔드 개발자 취준생 • 2023년 12월 21일
사용성과 보안성의 균형이라고 생각하면 편할까요?? 보안 방법에 대해서 조금 알아볼 필요가 있겠네요! 빠르고 친절한 답변 정말정말 감사드립니다!
장성호
현대오토에버 백엔드 • 2023년 12월 21일
서비스가 확장됨에 따라 서비스 안정성과 보안성의 균형인 것 같아요! Stateless와 Stateful 차이에서 오는 아키텍처 설계 난이도 차이가 있거든요. 서버가 여러 대이고 디비도 여러 대일 때, 세션(Stateful)과 JWT(Stateless)의 시나리오가 많이 차이납니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2023년 12월 21일
토큰 자체는 클라이양느과의 커뮤니케이션을 매우 효율적으로 만들어주지만, 노출되면 보안에 큰 위험이 될 수 있습니다. 예를 들어, JWT(Json Web Token) 같은 경우는 stateless한 인증 방식을 지원하여 사용자의 정보와 권한 등을 포함하고 있습니다. 이런 정보가 악의적인 사람들에게 노출된다면 그들이 해당 토큰을 활용해 웹사이트를 이용하거나 심지어는 권한을 부여받아 시스템 내부 데이터에 접근할 수도 있는 위험이 있습니다. 따라서 토큰은 가능한 안전하게 저장하고 관리하는 것이 중요합니다. 예를 들어 HttpOnly 쿠키에서 저장해서 XSS(Cross-Site Scripting) 공격으로부터 보호 받거나, HTTPS를 사용하여 데이터 전송 중에 토큰이 노출되는 것을 막는 등의 방법을 사용할 수 있습니다. 결론적으로, 당신의 질문 "토큰은 클라이언트에 노출되어도 상관없나요?"에 대한 답변은 '아니요, 안전하지 않습니다.'입니다. 가능한 한 노출을 최소화하고 효과적인 방법으로 토큰을 관리해야 합니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!