우아한테크코스 팀 프로젝트에서 쿠키를 이용해 조회수 어뷰징 방지 기능을 구현했었는데 CSRF에 아냐는 질문을 받은 적이 있었다. CSRF가 무엇인지 한 번 알아보도록 하자!!!
웹 어플리케이션 취약점 중 하나로 인터넷 사용자(희생자)가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등등)을 특정 웹 사이트에 요청하게 하는 공격입니다.
예를들어 페이스북 희생자의 계정으로 광고성 글을 등록하는 것과 같은게 CSRF를 이용한 공격입니다.
CSRF는 희생자의 컴퓨터를 감염시키거나 페이스북 서버를 해킹해서 이뤄지는 공격이 아닙니다. 희생자의 쿠키 기반 인증 정보를 사용해 공격자가 희생자인것 처럼 웹 서비스에서 권한이 없는 행위를 하는 것입니다.
sessionID
가 사용자 브라우저 쿠키에 저장됩니다.sessionID
는 브라우저에 의해 자동으로 함께 서버로 요청됩니다.sessionID
를 통해 공격자가 보낸 요청을 희생자가 보낸 요청으로 판단하고 처리합니다.대표적으로 방어기법에 대해 알아보겠습니다!!
Back-end에서 request의 referer를 확인해 domain(ex. facebook.com)이 일치하는지 검증하는 방법입니다. Referer은 현재 요청을 보낸 페이지의 절대 혹은 부분 주소를 포함합니다. 보통의 경우 Host헤더와 Referer헤더의 값이 일치합니다.
하지만 도메인 내의 페이지에 XSS 취약점이 있는 경우 CSRF 공격에 취약해 질 수 있습니다. 세밀하게 페이지 단위까지 일치하는지 검증을 하면 도메인 내 타 페이지의 XSS 취약점에 의한 CSRF 공격을 방어할 수 있습니다.
https://itstory.tk/entry/CSRF-%EA%B3%B5%EA%B2%A9%EC%9D%B4%EB%9E%80-%EA%B7%B8%EB%A6%AC%EA%B3%A0-CSRF-%EB%B0%A9%EC%96%B4-%EB%B0%A9%EB%B2%95
https://junhyunny.github.io/information/security/spring-boot/spring-security/cross-site-reqeust-forgery/