CSRF (Cross Site Request Forgery)
- 사이트간 요청 위조
- 웹 애플리케이션 취약점 중 하나로 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 하여 특정 웹페이지를 보안에 취약하게 한다거나, 수정, 삭제, 등록 등의 작업을 하게 만드는 공격방법을 의미합니다.
방어 방법
1) Referrer 검증
- Request Header에 있는 요청을 한 페이지의 정보가 담긴 Referrer 속성을 검증하여 차단하는 방법입니다.
- 같은 도메인 상에서 요청이 들어오지 않는다면 차단하도록 하는 것입니다.
- 일반적으로 이 방법만으로도 대부분 방어가 가능합니다.
2) Security Token(CSRF Token)
- 랜덤한 수를 사용자의 세션에 저장하여 사용자의 모든 요청(Request)에 대하여 서버 쪽에서 검증하는 방법입니다.
- 요청을 받을 때마다 백엔드에서 세션에 저장된 토큰값과 요청 파라미터에서 전달되는 토큰값이 같은지 검증하는 방법입니다.
3) Double Submit Cookie
- Security Token 검증의 한 종류로 세션을 사용할 수 없는 환경에서 사용할 수 있는 방법입니다. 웹브라우저의 Same Origin 정책으로 인해 자바스크립트에서 타 도메인의 쿠키 값을 확인/수정하지 못한다는 것을 이용한 방어 기법입니다.
- 스크립트 단에서 요청 시 난수 값을 생성하여 쿠키에 저장하고 동일한 난수 값을 요청 파라미터(혹은 헤더)에도 저장하여 서버로 전송합니다. 서버단에서 쿠키의 토큰값과 파라미터의 토큰값이 일치하는지만 검사하면 됩니다.
- 서버에 따로 토큰 값을 저장할 필요가 없어 세션을 이용한 검증보다 개발 공수가 적은 편입니다.
- 피싱 사이트에서는 도메인이 달라 쿠키에 값을 저장하지 못하므로(Same Origin 정책) 가능한 방어 기법입니다.
References