JWT를 localStorage 또는 쿠키에 저장해야합니까?
JWT를 사용하여 REST API를 보호하기 위해 일부 자료 (이 가이드 및이 질문 과 같은 )에 따르면 JWT는 localStorage 또는 Cookies에 지정 수 있습니다 . 내 이해를 바탕으로 :
- localStorage 는 XSS의 영향을 일반적으로 민감한 정보를 저장하지 않는 것이 좋습니다.
- 쿠키 를 사용하면 XSS의 위험을 완화하는 "httpOnly"플래그를 적용 할 수 있습니다. 그러나 백엔드의 쿠키에서 JWT를 진행하려면 CSRF의 대상이됩니다.
따라서 위의 전제에 따라 JWT를 쿠키에 저장하는 것이 좋습니다. 서버에 대한 모든 요청에서 JWT는 쿠키에서 읽기 베어러 체계를 사용하여 인증 헤더에 추가됩니다. 그런 다음 서버는 요청 헤더에서 JWT를 확인할 수 있습니다 (쿠키에서 읽는 것과 반대).
내 이해가 맞습니까? 여기서 위의 접근 방식에 보안 문제가 있습니까? 아니면 localStorage를 사용하여 처음으로 있습니까?
@ pkid169가 말한 기사에서 언급 한 XSRF Double Submit Cookies 방법이 마음에 들지만 기사가 당신에게 말하지 않는 한 가지가 있습니다. 공격자가 할 수있는 일 CSRF 쿠키 (HttpOnly가 아님)를 읽는 펼쳐보기를 삽입 한 다음 JWT 쿠키가 자동으로 전송되는 CSRF 토큰을 사용하여 API 엔드 포인트 중 하나에 요청하는 것 여전히 XSS로부터 보호되지 않습니다.
하지만 실제로는 여전히 XSS에 취약합니다. 공격자가 나중에 사용하기 위해 JWT 토큰을 훔칠 수는 없지만 XSS를 사용하여 사용자를 대신하여 사용할 수 있습니다.
JWT를 localStorage에 저장하든 http 전용이 아닌 쿠키에 XSRF 토큰을 저장하든 관계없이 둘 다 XSS에서 쉽게 얻을 수 있습니다. HttpOnly 쿠키의 JWT조차도 고급 XSS 공격에 의해 잡힐 수 있습니다.
따라서 쿠키를 이중 제출하는 방법 외에도 콘텐츠 이스케이프를 포함하여 항상 XSS에 대한 모범 사례를 따라야합니다. 이것은 브라우저가 작업하는 작업을 수행하게하는 실행 코드를 제거하는 것을 의미합니다. 일반적으로 이것은 자바가 평가하는 // <! [CDATA [태그 및 HTML 속성을 제거하는 것을 의미합니다.
Stormpath 의 적시 게시물은 내 요점을 정교하게 설명하고 내 질문에 답했습니다.
TL; DR
쿠키에 JWT를 저장 한 다음 내가 언급 한 모든 요청에 대해 인증 헤더에 JWT를 전달하거나 기사에서 제안한대로 백엔드에 의존하여 CSRF를 방지합니다 (예 : xsrfToken
Angular의 경우 사용 ).
참고 URL : https://stackoverflow.com/questions/34817617/should-jwt-be-stored-in-localstorage-or-cookie
'ProgramingTip' 카테고리의 다른 글
Azure DevOps, YAML 릴리스 파이프 라인? (0) | 2020.11.25 |
---|---|
둘 이상의 항목이 이미 발견 된 경우에도 Enumerable.Single ()이 모든 요소를 반복하는 이유는 무엇입니까? (0) | 2020.11.25 |
어두운면으로 가라는 압박을 받고 (0) | 2020.11.25 |
로그 파일 대신 데이터베이스에 기록 (0) | 2020.11.25 |
.NET 2.0 SDK 프로그램-각 도구의 기능은 무엇입니까? (0) | 2020.11.25 |