: 웹사이트의 취약점을 이용하여 사용자가 의도하지 않은 요청을 송신하도록 하는 공격을 의미힌다

HTTP의 Stateless 특성에 기인한 특정 웹 애플리케이션에 대해 일련의 요청 들의 상관관계를 특정할 수 없으므로 세션 유지 등에 일반적으로 쿠키 정보 등이 조건만 만족하면 자동으로 송신되기 떄문에 가능하다.

공격시나리오

  1. 공격자가 공격코드를 가진 웹페이지를 제작하여 공개 or 특정 웹사이트에 공격용 코드를 삽입
  2. 피해자가 공격자가 준비해둔 페이지에 접속
  3. 피해자(피해자의 브라우저)는 공격자가 준비해둔 요청을 서버로 송신

공격방법

정형화된 수법은 없고 웹에 요청을 보낼 수 있는 모든 방법이 공격 방법이 될 수 있다.

ex) javascript, ajax, form 방법, img태그를 이용한 방법 등..

방어 방법

  1) Referrer 검증

  • Request Header에 있는 요청을 한 페이지의 정보가 담긴 Referrer 속성을 검증하여 차단하는 방법
  • 같은 도메인 상에서 요청이 들어오지 않는다면 차단하는것
  • 대부분 방어가 가능

  2) Security Token(CSRF token)

  • 랜덤한 수를 사용자의 세션에 저장하여 사용자의 모든 요청(Request)에 대하여 서버 쪽에서 검증하는 방법
  • 요청을 받을 떄마다 백엔드에서 세션에 저장된 토큰값과 요청 파라미터에서 전달되는 토큰 값이 같은지 검증
  • Security Token 검증의 한 종류
  • 세션을 사용할 수 없는 상황에서 사용할 수 있다.
  • Same Origin 정책으로 인해 자바스크립트에서 타 도메인의 쿠키 값을 확인/수정하지 못한다는 것을 이용한 방어 기법
  • 스크립트 단에서 요청 시 난수 값을 생성하여 쿠키에 저장하고 동일한 난수 값을 요청 파라미터(혹은 헤더)에도 저장하여 서버로 전송
  • 서버단에서 쿠키의 토큰값과 파라미터의 토큰값이 일치하는지 검사
  • 서버에 따로 토큰 값을 저장할 필요가 없어 세션을 이용한 검증보다 개발 공수가 적은 편
  • 피싱 사이트에서 도메인이 달라 쿠키에 값을 저장하지 못하므로(Same Origin 정책) 가능한 방어 기법