**XSS (Cross-Site Scripting)**는 웹 애플리케이션에서 사용자가 제공한 데이터를 검증 없이 출력할 때 발생하는 보안 취약점입니다. 공격자는 악성 스크립트를 웹 페이지에 삽입하여 사용자의 브라우저에서 실행되게 만듭니다. 이 스크립트는 종종 사용자 정보(예: 로그인 정보, 세션 쿠키 등)를 훔치거나 악성 작업을 수행하는 데 사용됩니다. 예를 들어, 공격자가 악성 JavaScript 코드를 삽입해 사용자의 쿠키 정보를 탈취하는 방식입니다.
**CSRF (Cross-Site Request Forgery)**는 사용자가 인증된 상태에서 의도하지 않은 요청을 서버에 보내게 만드는 공격입니다. 예를 들어, 사용자가 로그인한 상태에서 공격자가 악성 웹사이트를 만들어 그 웹사이트에서 특정 요청을 보내게 하는 방식입니다. 이 요청은 사용자 인증 정보를 포함하고 있기 때문에 서버는 이를 정상적인 요청으로 처리하게 되며, 사용자는 그 요청을 실행한 사실을 인지하지 못합니다. CSRF는 주로 사용자가 로그인한 상태에서 발생하며, 중요한 데이터나 동작을 악용할 수 있습니다.
SameSite는 쿠키의 속성 중 하나로, 쿠키가 다른 사이트에서 보낸 요청에 포함되지 않도록 설정하는 기능입니다. 이는 CSRF 공격을 방어하는 데 사용됩니다. SameSite 속성에는 세 가지 값이 있습니다:
Strict
보다는 덜 엄격하지만, 주로 안전한 요청(예: 링크 클릭, GET 요청)에 대해서만 쿠키를 포함시킵니다. CSRF 공격을 일부 방어할 수 있습니다.Secure
속성도 설정해야만 사용됩니다.SameSite 속성을 Strict 또는 Lax 로 설정하면, 쿠키가 다른 웹사이트에서 발생한 요청에 포함되지 않도록 제한할 수 있습니다. 예를 들어, CSRF 공격은 사용자가 다른 웹사이트에서 악의적으로 요청을 보내게 하는 방식이므로, 쿠키가 다른 웹사이트의 요청에 포함되지 않도록 하면 공격을 방어할 수 있습니다.
HttpOnly와 Secure를 함께 설정하면 쿠키가 자바스크립트로 접근할 수 없고, HTTPS를 통해서만 안전하게 전송되어 보안이 강화됩니다.
Strict
또는 Lax
로 설정하여 CSRF 공격을 방어할 수 있습니다.HttpOnly
와 Secure
로 설정하여 보안을 강화할 수 있지만, 여전히 XSS 취약점이 존재하면 위험할 수 있습니다.