인프런 커뮤니티 질문&답변

정재빈님의 프로필 이미지

작성한 질문수

스프링 시큐리티

13) 사이트 간 요청 위조 - CSRF, CsrfFilter

CSRF token 질문

작성

·

599

0

공격자가 링크를 누를때 user의 sessionId 와 CSRF 토큰을 공격자에게 넘겨 주도록 설정하면 token이 큰 의미가 없지 않을까요?

token 이 어떠한 방식으로 공격자에게는 넘어가지 않고, server 에게만 전송이 되는 건지가 궁금합니다.

답변 2

0

정수원님의 프로필 이미지
정수원
지식공유자

CSRF 토큰은 쿠키로 브라우저에 남지 않으니 공격자가 가지고 갈 방법이 없지 않을까요?

CSRF 토큰은 랜덤하게 생성되어 request 의 속성에 담겨서 응답이 되고 있습니다.

즉 클라이언트가 요청하는 시점에 서버에서 생성해서 주게 되는데 공격자는 사용자 서버와 연결되어 있지 않으니 토큰을 받을 방법이 없습니다.

0

안녕하세요, 인프런 AI 인턴입니다.

CSRF 토큰은 서버에 의해 생성되며, 사용자의 세션에 안전하게 저장됩니다. 이 토큰은 사용자가 서버에 요청을 보낼 때마다 서버로 전송되어야 하는데, 일반적으로 폼 데이터의 일부로서 또는 HTTP 요청 헤더를 통해 전송됩니다. 토큰은 사용자의 세션에 연결되어 있어 오직 해당 사용자만이 해당 토큰을 서버로 전송할 수 있습니다.

공격자가 사용자의 CSRF 토큰을 가져가기 위해서는 사용자의 브라우저를 속여야 하는데, 이는 보안이 잘 구성된 웹 어플리케이션에서는 매우 어려운 일입니다. 사용자의 세션 ID와 CSRF 토큰을 안전하게 전송하기 위해 웹 어플리케이션은 HTTPS와 같은 보안 프로토콜을 사용하여 데이터를 암호화합니다. 또한, CSRF 토큰은 쿠키에 저장되지 않고, 웹 페이지에 포함되어 있기 때문에, CSRF 토큰을 자동으로 전송할 수 있는 쿠키와 달리, 사용자가 실제로 유효한 요청을 할 때만 서버로 전송됩니다.

스프링 시큐리티는 기본적으로 CSRF 보호 기능을 활성화해두고 있습니다. 스프링 부트를 사용하면서 POST, PUT, DELETE 등을 사용하는 액추에이터 엔드포인트에 대해 CSRF 토큰이 없으면 403 에러를 반환합니다. 이는 스프링 시큐리티의 기본 설정을 사용할 때 발생합니다.

만약 비브라우저 클라이언트에 의해 사용되는 서비스를 개발하고 있다면 CSRF 보호 기능을 비활성화하는 것을 고려할 수 있습니다. CSRF 보호 기능에 대한 추가적인 정보는 Spring Security Reference Guide에서 확인하실 수 있습니다. CSRF 토큰은 공격자에게 전달되지 않도록 설계되어 있어, 서버와 클라이언트 간의 안전한 통신을 도와주는 중요한 보안 수단입니다.

출처: Spring Boot Reference Documentation