Spring

토큰 저장할 때 로컬스토리지와 쿠키

MDanderson 2023. 4. 27. 23:42

쿠키에 토큰 저장:

이 방식에서는 서버 측에서 생성한 토큰을 쿠키에 저장하고, 이후 요청 시 쿠키를 사용해 인증 정보를 전달합니다.
쿠키는 HttpOnly 옵션을 설정하여 자바스크립트를 통한 접근을 방지할 수 있습니다. 이렇게 하면 크로스 사이트 스크립팅(XSS) 공격의 위험을 줄일 수 있습니다.
쿠키를 사용하면 CSRF(Cross-Site Request Forgery) 공격에 취약해질 수 있습니다. 하지만 이를 방지하기 위해 CSRF 토큰을 사용하는 등의 보안 조치를 적용할 수 있습니다.


로컬 스토리지에 토큰 저장:

이 방식에서는 서버에서 생성한 토큰을 클라이언트에 반환한 후, 클라이언트 측에서 로컬 스토리지에 토큰을 저장합니다.
로컬 스토리지에 저장된 토큰은 자바스크립트를 통해 접근할 수 있기 때문에 XSS 공격에 취약합니다.
로컬 스토리지를 사용하면 CSRF 공격에 대한 취약성은 줄어듭니다.
결론적으로, 어떤 방식을 선택할지는 프로젝트의 보안 요구 사항과 개발 환경에 따라 결정해야 합니다. 쿠키를 사용하는 방식은 HttpOnly 옵션을 통해 XSS 공격으로부터 상대적으로 안전하지만, CSRF 공격에 취약할 수 있습니다. 반면, 로컬 스토리지를 사용하는 방식은 CSRF에 대한 취약성이 적지만, XSS 공격에 노출될 수 있습니다. 각 방식의 장단점을 고려하여 프로젝트에 적합한 선택을 해야 합니다.

 

로컬 스토리지에 JWT를 저장하는 것은 일부 보안 이슈를 유발할 수 있습니다. 로컬 스토리지는 브라우저의 개발자 도구를 통해 쉽게 접근할 수 있기 때문에, 악의적인 사용자가 이를 수정하거나 이용할 가능성이 있습니다.

보안을 강화하기 위해 다음과 같은 대안들을 고려할 수 있습니다:

HTTP Only 쿠키: JWT를 HTTP Only 쿠키에 저장하여 브라우저를 통해 직접 접근할 수 없도록 할 수 있습니다. 이렇게 하면 크로스 사이트 스크립팅(XSS) 공격의 위험을 줄일 수 있습니다. 하지만 크로스 사이트 요청 위조(CSRF) 공격에 취약해질 수 있으므로 이를 방지하기 위한 추가적인 조치가 필요합니다.

세션: JWT 대신 서버 측에서 세션을 관리하여 사용자 인증을 처리할 수도 있습니다. 세션을 사용하면 사용자의 인증 정보가 서버에서 관리되며 클라이언트에는 세션 ID만 전달됩니다. 이 방식은 JWT보다 보안이 더 강화되어 있지만, 서버 측에서 상태를 유지해야 하는 단점이 있습니다.

메모리에 저장: JWT를 클라이언트 측의 메모리에 저장하면 보안성이 향상될 수 있습니다. 이렇게 하면 사용자가 브라우저를 종료하면 토큰이 자동으로 삭제됩니다. 하지만 이 방식은 웹 애플리케이션의 사용성을 떨어뜨릴 수 있으며, 클라이언트 측 자바스크립트에 여전히 접근 가능한 문제가 있습니다.

어떤 방식을 선택하더라도, JWT 또는 세션 ID를 안전하게 전송하기 위해 HTTPS를 사용해야 합니다. 결론적으로, 각 방식의 장단점을 고려하여 애플리케이션의 요구 사항과 보안 요구 사항에 맞는 방법을 선택해야 합니다.