🔥 웹 개발자와 정보보안 입문자가 꼭 알아야 할 웹 해킹 & 시큐어 코딩
위아래 1줄씩 띄우고 중요한 부분은 볼드 효과
📍 CSRF란 무엇인가?
👉🏻 Cross-Site Request Forgery: 사이트간의 요청 위조
👉🏻 공격자는 스크립트를 사용하여 사용자가 의도하지 않은 요청을 전달함 (ex: 사용자 정보 수정, 탈퇴, 작성, ...)
📍 공격 원리 분석
공격자의 (패스워드 변경 스크립트가 등록된) 게시글 등록
> DB에 스크립트 저장
> 사용자의 게시글 조회
> DB 스크립트 조회
> 스크립트가 실행되며 패스워드 변경
👉🏻 사용자 공격
공격자가 (A사이트에 광고를 게시하는) 스크립트가 담긴 게시글 작성
> DB에 스크립트 저장
> 사용자의 게시글 조회
> DB 스크립트 조회
> 스크립트 실행되며 사용자의 계정으로 A사이트에 광고 게시물 등록
👉🏻 사용자 이용하여 공격자가 원하는 기능 실행
📍 XSS VS CSRF
👉🏻 CSRF는 사이트를 이동하는 경우도 있고 이동하지 않는 경우도 있음
👉🏻 XSS는 공격자의 서버로 요청을 하고 공격자 서버에서 사용자에게 비정상 응답값을 보냄! 즉, 공격 대상이 사용자임
👉🏻 CSRF는 정상적인 웹 사이트에 비정상적 요청을 보냄! 즉, 공격 대상이 서버임
📍 대응 방안
👉🏻 Refer 값 검증: 요청값을 보내는 사이트를 확인하는 등
👉🏻 CSRF TOKEN 사용: FORM의 토큰값(어플리케이션단, 접속 시마다 토큰값을 다르게 함)과 Action의 토큰값(자바단)을 비교함
공격자의 공격으로 들어온 값의 경우, form 페이지에 접속하지 않기 때문에 어플리케이션단의 토큰값 자체가 존재하지 않게 됨
👉🏻 인증 로직 사용 / CAPCHA 사용: 캡차의 경우 게시글을 작성할 때 많이 사용함
👉🏻 SameSite Cookie: A사이트의 쿠키를 B사이트에서는 사용할 수 없게 함
📍 CSRF Token 동작 상세 원리
폼 페이지(Form Page) 액션 페이지(Action Page)
---> Token 전달
<Token1> <Token 검증>
👉🏻 폼 페이지에서 작성한 토큰을 액션 페이지로 전송하게 되는데,
사용자가 폼 페이지에 접근하지 않고 공격자의 공격으로 액션 페이지에 접근하게 된다면
액션 페이지에서 토큰을 검증할 때 토큰이 일치하지 않으므로(토큰이 없으므로) 공격할 수 없게 됨
출처