스택큐힙리스트

브라우저에 JWT을 저장하는 위치는 어디인가요? CSRF에 대한 보호 방법은 어떻게 하나요? 본문

카테고리 없음

브라우저에 JWT을 저장하는 위치는 어디인가요? CSRF에 대한 보호 방법은 어떻게 하나요?

스택큐힙리스트 2023. 11. 29. 00:02
반응형

나는 쿠키 기반 인증을 알고 있다. SSL과 HttpOnly 플래그를 적용하여 쿠키 기반 인증을 MITM과 XSS로부터 보호할 수 있다. 그러나 CSRF로부터 보호하기 위해서는 추가적인 특별한 조치가 필요하다. 그것들은 좀 복잡하다. (참고)


최근에, 나는 JSON Web Token (JWT)이 인증에 대한 해결책으로 꽤 핫하다는 것을 발견했다. JWT의 인코딩, 디코딩 및 검증에 대한 내용을 알고 있다. 그러나 어떤 웹사이트/튜토리얼에서는 JWT를 사용한다면 CSRF 보호가 필요하지 않다고 얘기하는 이유를 이해하지 못한다. 나는 많이 읽어보고 아래의 문제를 요약하려고 노력했다. JWT에 대한 큰 그림을 제공하고, 나의 JWT에 대한 오해를 명확히 해주길 원한다.



  1. JWT가 쿠키에 저장되어 있다면, 서버는 세션을 확인하기 위해 쿠키/토큰을 검증할 필요 없이 쿠키 기반 인증과 동일하다고 생각합니다. 특별한 조치가 없으면 여전히 CSRF의 위험이 있습니다. JWT는 쿠키에 저장되는 것이 맞나요?




  2. JWT가 localStorage/sessionStorage에 저장되어 있다면, 쿠키가 사용되지 않기 때문에 CSRF를 방지할 필요가 없습니다. 질문은 JWT를 서버에 어떻게 보낼 것인가입니다. 여기서는 jQuery를 사용하여 JWT를 ajax 요청의 HTTP 헤더로 보내는 것을 제안하고 있습니다. 그렇다면 인증은 오직 ajax 요청만 가능한가요?




  3. 또한, 하나의 블로그에서 Authorization header와 Bearer를 사용하여 JWT를 보내는 것을 언급하고 있습니다. 이 블로그에서 언급하는 방법을 이해하지 못합니다. Authorization header와 Bearer에 대해 좀 더 설명해주실 수 있나요? 이렇게 하면 모든 요청의 HTTP 헤더로 JWT를 전송하는 것인가요? 만약 그렇다면, CSRF는 어떻게 처리되나요?



답변 1

주의


실제로, 여전히 XSS에 취약합니다. 공격자는 당신의 JWT 토큰을 나중에 사용하기 위해 도난할 수는 없지만, XSS를 통해 여전히 사용자를 대신하여 요청을 보낼 수 있습니다.


localStorage에 JWT를 저장하든, HttpOnly 쿠키에 XSRF 토큰을 저장하든, 둘 다 XSS로 쉽게 훔쳐질 수 있습니다. 심지어 HttpOnly 쿠키에 저장된 JWT도 XST 메소드와 같은 고급 XSS 공격으로 훔쳐질 수 있습니다.


그러므로 이중 제출 쿠키 방법에 추가하여 XSS에 대한 최상의 실천 방법을 항상 따라야 합니다. 이는 브라우저가 의도치 않은 동작을 수행하도록하는 실행 가능한 코드를 제거하는 것을 의미합니다. 일반적으로 이는 JavaScript가 평가되도록하는 // <![CDATA[ 태그와 HTML 속성을 제거하는 것을 의미합니다.


여기에서 더 읽을 수 있습니다:

답변 2

브라우저에서 JWT를 저장하는 위치는 어디인가요? CSRF에 대해 어떻게 보호할 수 있나요? 이 주제에 대한 SEO 친화적인 한국어 에세이를 작성해주세요.
브라우저에서 JWT를 저장하는 위치는 다양하지만, 널리 사용되는 방법 중 하나는 웹 스토리지(localStorage 또는 sessionStorage)에 저장하는 것입니다. 이렇게 함으로써 JWT는 클라이언트 측에서 임시로 보관되어 인증된 사용자의 상태를 유지합니다. 예를 들어, 사용자가 웹 애플리케이션에 로그인하면 서버는 JWT를 생성하고 클라이언트에게 전달합니다. 클라이언트는 이 JWT를 로컬 스토리지에 저장하여, 애플리케이션의 다른 요청에서 이를 사용하여 자격 증명을 확인합니다.
그러나 중요한 점은 localStorage와 sessionStorage가 XSS (Cross-Site Scripting) 공격에 취약하다는 것입니다. XSS 공격은 공격자가 악성 스크립트를 삽입하여 사용자의 브라우저에서 실행시키는 것을 목표로합니다. 이렇게 되면 공격자는 자신의 요청을 위조하여 사용자의 권한으로 명령을 실행할 수 있게 됩니다. 따라서, XSS 공격으로부터 안전하게 JWT를 보호하기 위해서는 몇 가지 예방 조치를 취해야 합니다.
첫 번째로, 브라우저의 Content Security Policy (CSP)를 설정하는 것이 중요합니다. CSP는 웹 페이지에서 실행되는 자바스크립트의 원천을 제한하여 악성 스크립트 실행을 방지하는 보안 기법입니다. CSP는 웹 애플리케이션에 대한 공격을 어렵게 만들고 XSS 공격의 영향을 최소화하는 데 도움이 됩니다.
두 번째로, CSRF (Cross-Site Request Forgery) 공격으로부터 보호하기 위해 추가적인 조치를 취해야 합니다. CSRF 공격은 사용자가 이미 인증된 상태에서 공격자가 전송한 요청을 실행시키는 것을 목표로 합니다. 공격자는 사용자가 신뢰하는 웹 사이트에 대한 요청을 위조하여 실행시킴으로써 공격을 수행합니다. 이를 방지하기 위해 CSRF 토큰을 사용하는 것이 일반적인 방법입니다. 서버는 사용자의 세션과 관련된 CSRF 토큰을 생성하여 클라이언트에게 전달합니다. 이 토큰은 사용자가 애플리케이션의 요청을 수행할 때마다 함께 전송되어 확인됩니다.
마지막으로, SEO를 고려할 때는 페이지의 컨텐츠와 관련된 키워드를 중심으로 작성해야 합니다. 이를 위해 브라우저에서 JWT 저장 위치, CSRF 보호 방법, JWT 보안, XSS 공격 방지, CSRF 토큰 사용, 브라우저 보안 등과 같은 키워드를 적절하게 사용해야 합니다. 또한, 페이지 구조와 헤딩 태그 조정, 외부 링크 및 내부 링크 구성 등 SEO 기법을 적용하여 웹 페이지의 노출성을 향상시키는 데도 신경을 써야 합니다.
요약하자면, 브라우저에서 JWT를 저장할 위치는 localStorage 또는 sessionStorage입니다. 그러나 XSS 공격으로부터 JWT를 보호하기 위해서는 CSP를 설정해야 합니다. 또한 CSRF 공격으로부터 보호하기 위해 CSRF 토큰을 사용해야 합니다. SEO를 고려할 때는 관련 키워드를 적절하게 사용하고, 페이지 구조와 링크 구성에도 주의해야 합니다. 이렇게 함으로써 보안과 검색 엔진 최적화 모두에 대한 요구를 충족시킬 수 있을 것입니다.

반응형
Comments