쌩로그

사이트 간 요청 위조 - CSRF, CsrfFilter 본문

Spring/Spring Security

사이트 간 요청 위조 - CSRF, CsrfFilter

.쌩수. 2023. 5. 17. 19:01
반응형

나는 어차피 잘 될 사람이다.

어차피 잘 될 것이고, 지금도 잘 되고있고, 과거도 잘 되어왔기에,,,


목차

  1. 포스팅 개요
  2. 본론
      2-1. CSRF란
      2-2. CSRF 흐름
      2-3. CSRF 방지방법
      2-4. 스프링 시큐리티에서 Csrf필터
  3. 요약

해당 메서드에 대한 설명은 내 깃헙레포에 있다.
해당 내용은 인프런의 정수원님 강의에서 기반한 내용이다.

1. 포스팅 개요

ㄹㅇ 제곧내이다.
CSRF가 무엇인지, 어떤 흐름인지에 대한 내용이다.
그리고 스프링 시큐리티는 이걸 어떻게 방지하게 해주는가, 클라이언트는 어떻게 대처해야하는가 에 대한 내용이다.

바로 본론으로 가자.

2. 본론

2-1. CSRF란

사용자의 의도와는 무관하게 공격자가 의도한 방식대로 사용자가 서버로 요청을 하고, 받는 공격기법을 사이트 간 요청 위조(Cross Site Request Forgery : CSRF)라고한다.

2-2. CSRF 흐름

사용자, 공격자 , 사용자가 이용하는 쇼핑몰이 있다고 가정한다.

  1. 사용자가 이용하는 쇼핑몰로 로그인을 한 후, 쿠키를 발급받는다.
  2. 공격자가 공격용 링크를 사용자에게 전달한다.
  3. 사용자가 링크를 클릭하여 공격용 웹페이지에 접속한다.
      // 해당링크에는 이미지태그가 있는데, 이미지의 src(주소)에 공격자의 주소가 파라미터로 설정되어있다.
  4. 공격자의 요청이 쇼핑몰로 전달되는데, 쇼핑몰은 사용자에게서 온 요청으로 받아들이게 된다.
  5. 쇼핑몰은 4번의 요청에서 자신이 발급한 쿠키가 있는지 없는지 확인하는데, 당연히 사용자의 브라우저로 요청을 하기때문에, 정상적으로 요청을 받아들이고 응답한다.

2-3. CSRF 방지방법

스프링 시큐리티는 CSRF를 방지하기 위해서 CsrfFilter를 제공한다.

CsrfFilter

  • 모든 요청에 랜덤하게 토큰을 생성하고, 생성된 토큰을 HTTP파라미터로 요구한다.
  • 요청시 전달되는 토큰 값과 서버에 저장된 실제 값과 비교한 후 일치하지 않으면 요청은 실패처리한다.

서버가 csrf토큰을 발급할 때, 클라이언트쪽에서는 form태그에서 hidden으로 서버에서 발급한 csrf토큰명과 토큰 값을 설정할 수 있다.

 // <input type="hidden" name="${csrf.parameterName}" value="${_csrf.token}" />

서버에 접근시

 // HTTP 메소드의 PATCH, POST, PUT, DELETE 메서드를 사용할 때 이 토큰을 필요로 한다.
 // 참고 : 단순히 페이지를 불러오는 하는 get 요청은 csrf 를 패스한다.

2-4. 스프링 시큐리티에서 Csrf필터

Spring Security의 Configure메서드에서는 다음과 같이 설정가능하다.

http.csrf()              // 기본 활성화되어있음
http.csrf().disabled()   // 비활성화도 가능하다.

3. 요약

  • CSRF는 공격자가 심어놓은 링크를 통해서 사용자가 공격자의 의도한 방식대로 서버에 접근하여 공격자가 사용자의 정보를 가지고 서버에 접근하는 공격기법이다.
  • 스프링 시큐리티에서는 이를 방지할 수 있는 CsrfFilter를 제공한다.
  • 우리는 스프링 시큐리티에서 구현해놓은 것으로 CSRF 공격을 막을 수가 있다.

4. 끝

728x90
Comments