일단 XSS 와 CSRF 의 공격은 거의 비슷하다
둘다 악성 스크립트를 사이트에 게시글 같은 걸로 올리고 특정 사용자가 게시글을 읽었을때 발생하는 공격 방식이다.
XSS의 공격 목적인 사용자의 쿠기(세션아이디 즉 로그인) 탈취가 목적이라면
CSRF 공격은 특정 사용자의 특정 행동 권한을 탈취하는게 목적이다.
CSRF의 특정사용자의 특정 행동 권한을 탈취하는게 무슨말인지 감이 안올수 있다.
예를 들어서
게시글에 악성 스크립트를 삽입하여 게시글을 특정 사용자가 읽었을때 읽은 사용자가 게시글을 작성하게 하는 공격이 가능하다.
아래와같은 상황이 있다고 가정 해보자
사용자는 아래와 같은 HTTP 요청으로 게시글을 작성할수 있다고 해보자
http://localhost:4000/post
Cookie: sessionId=your_session_id
title=abc&body=abc
post 요청을 스크립트 주입으로 실행하는법?
form태그를 이용하면된다. title과 body를 받는 form post 태그를 만들어 보자
<form id="csrf_form" action="http://localhost:4000/post" method="post">
<input type="hidden" name="title" value="abc">
<input type="hidden" name="body" value="abc">
</form>
<script>
document.getElementById("csrf_form").submit();
</script>
이제 CSRF 공격을 하기전 정상적인 동작을 살펴보자
로그인 후 게시글 작성, 게시글 확인의 흐름이다.
이제는 로그인 후 위 스크립트를 게시글로 올리고 사용자의 접속을 유도 해보자
스크립트가 삽입된 게시글을 클릭하자 접속된 사용자의 권한으로 게시글이 생성된다.
CSRF 공격은 위와같이 스크립트를 주입하여 사용자의 권한을 도용하여 특정 행동을 공격자가 시키는 공격이다.
참고자료
https://velog.io/@haizel/XSS와CSRF-차이점-및-대응-방안
https://www.youtube.com/watch?v=eWEgUcHPle0
https://www.youtube.com/watch?v=nzoUgKPwn_A&t=1s
https://velog.io/@gwanuuoo/CSRF-공격과-방어-기법
https://www.xn--hy1b43d247a.com/critical-info-infrastructure/01-account-management/csrf-token