0. 사전 지식

  1. **XSS (Cross-Site Scripting)**는 웹 애플리케이션에서 사용자가 제공한 데이터를 검증 없이 출력할 때 발생하는 보안 취약점입니다. 공격자는 악성 스크립트를 웹 페이지에 삽입하여 사용자의 브라우저에서 실행되게 만듭니다. 이 스크립트는 종종 사용자 정보(예: 로그인 정보, 세션 쿠키 등)를 훔치거나 악성 작업을 수행하는 데 사용됩니다. 예를 들어, 공격자가 악성 JavaScript 코드를 삽입해 사용자의 쿠키 정보를 탈취하는 방식입니다.

  2. **CSRF (Cross-Site Request Forgery)**는 사용자가 인증된 상태에서 의도하지 않은 요청을 서버에 보내게 만드는 공격입니다. 예를 들어, 사용자가 로그인한 상태에서 공격자가 악성 웹사이트를 만들어 그 웹사이트에서 특정 요청을 보내게 하는 방식입니다. 이 요청은 사용자 인증 정보를 포함하고 있기 때문에 서버는 이를 정상적인 요청으로 처리하게 되며, 사용자는 그 요청을 실행한 사실을 인지하지 못합니다. CSRF는 주로 사용자가 로그인한 상태에서 발생하며, 중요한 데이터나 동작을 악용할 수 있습니다.

  3. SameSite는 쿠키의 속성 중 하나로, 쿠키가 다른 사이트에서 보낸 요청에 포함되지 않도록 설정하는 기능입니다. 이는 CSRF 공격을 방어하는 데 사용됩니다. SameSite 속성에는 세 가지 값이 있습니다:

  1. SameSite 속성을 Strict 또는 Lax 로 설정하면, 쿠키가 다른 웹사이트에서 발생한 요청에 포함되지 않도록 제한할 수 있습니다. 예를 들어, CSRF 공격은 사용자가 다른 웹사이트에서 악의적으로 요청을 보내게 하는 방식이므로, 쿠키가 다른 웹사이트의 요청에 포함되지 않도록 하면 공격을 방어할 수 있습니다.

  2. HttpOnlySecure를 함께 설정하면 쿠키가 자바스크립트로 접근할 수 없고, HTTPS를 통해서만 안전하게 전송되어 보안이 강화됩니다.

1. JWT 토큰을 헤더에 저장

2. JWT 토큰을 쿠키에 저장

3. 리프레시 토큰은 쿠키, 엑세스 토큰은 헤더에 저장