작성
·
611
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 토큰은 공격자에게 전달되지 않도록 설계되어 있어, 서버와 클라이언트 간의 안전한 통신을 도와주는 중요한 보안 수단입니다.