..

CSRF(Cross Site Request Forgery) 공격과 방어

1. CSRF 란?

CSRF (Cross Site Request Forgery)는 ‘사이트 간 요청 위조’라고 불리는 보안 취약점입니다. 사용자가 이미 로그인하여 인증된 상태인 점을 악용하여, 공격자가 만든 악성 사이트를 통해 사용자의 브라우저가 의도치 않은 요청(비밀번호 변경, 자금 이체 등)을 서버로 보내게 만드는 공격 방식입니다.

2. 공격 시나리오

  1. 사용자가 정상적인 웹사이트(A)에 로그인하여 세션을 획득합니다.
  2. 공격자가 보낸 피싱 메일이나 게시글을 통해 사용자가 악성 사이트(B)에 접속합니다.
  3. 악성 사이트(B) 내부의 스크립트가 실행되면서, 브라우저가 사이트(A)로 특정 요청(예: 정보 변경)을 자동으로 전송합니다.
  4. 사이트(A)는 사용자의 브라우저에 남은 유효한 세션(쿠키)을 보고 이를 정상적인 사용자의 요청으로 오해하여 처리해 버립니다.

3. 예방책: CSRF 토큰(Token)

가장 대표적인 방어 수단은 CSRF 토큰을 사용하는 것입니다.

  • 서버는 사용자의 매 세션마다 고유하고 추측 불가능한 토큰을 생성합니다.
  • 사용자가 데이터를 전송할 때(POST 등) 반드시 이 토큰을 함께 실어 보내야 합니다.
  • 서버는 요청에 담긴 토큰이 세션에 저장된 토큰과 일치하는지 검증합니다. 공격자는 이 토큰 값을 알 수 없으므로 위조 요청을 보낼 수 없게 됩니다.

Spring Security를 사용하면 이 CSRF 방어 기능이 기본적으로 활성화(enabled)되어 있습니다. 별도 설정을 건드리지 않아도 폼 제출 시 자동으로 토큰 검증이 수행되어 안전한 서비스를 운영할 수 있습니다.