[Spring Security] CsrfFilter 개념 & 사용법

SeongWon Oh·2022년 1월 4일
0

Spring Framework

목록 보기
33/33
post-thumbnail

CSRF란?

CSRF는 사이트 간 요청 위조인 Cross-Site Request Forgery의 약자로 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 하며 특정 웹페이지를 보안에 취약하게 한다거나 데이터의 수정, 삭제 등의 동작을 하게 만드는 공격방법입니다.

공격 방법

공격방식은 위 사진과 같습니다.

  1. 악성 스크립트등을 통해 조작할 내용의 게시글 작성
  2. 악성 게시글은 DB에 저장됨
  3. 관리자 또는 특정 사용자(희생자)가 공격자가 작성한 게시글을 클릭
  4. 악성 게시글은 사용자가 웹 클라이언트를 통해 읽혀지는 동안 클라이언트 언어로 인식되어 동작
    4-1. 악성 스크립트가 동작하며 특정 사용자의 권한이 필요할 경우 해당 권한을 통해 동작함
  5. 희생자에겐 정상적인 게시글로 동작

출처 : https://kk-7790.tistory.com/73

해당 방법과 같이 게시글 외에도 CSRF 코드가 포함된 이메일을 통해서도 공격할 수 있다. 실제로 2008년 옥션 해킹 사고도 CSFR공격이었다고 합니다.

방어 방법

1. Referrer 검증

  • request header에 있는 요청을 한 페이지의 정보가 담긴 referrer속성을 검증하여 차단한다.
  • 프록시 툴, 패킷 등을 통해 확인하면 다른 페이지로 이동할 경우 그전 페이지 정보를 가지고 이동한다. 이때 전페이지 정보가 없거나, 외부 사이트에서 요청을 한 경우 요청을 처리하지 않는 방법이 있다.

2. CAPTCHA사용

  • 회원정보 변경, 게시글 작성 등 CSRF의 공격을 막아야 하는 페이지에서 캡챠를 사용해 인증이 가능한 것만 요청을 처리해주는 방법이 있다.
  • 캡챠는 랜덤 이미지를 통해 인증이 되므로 사용자 몰래 요청하는것이 불가능 하다는 장점이 있다.

3. CSRF 토큰 사용 (Spring Security에서 지원)

  • 특정 권한이 필요한 페이지(EX: 회원 정보 수정 등)는 해당 페이지와 실제 동작이 일어나는 페이지사이에 토큰을 생성해 그 값을 비교하여 토큰이 존재하지 않거나 다른 경우 동작을 허용하지 않는 방법이 있다.

Spring Security의 CsrfFilter

스프링 시큐리티는 기본적으로 CSFR Token을 사용하여 CSRF공격을 막아주는 CsrfFilter를 제공합니다.

동작 방법은 다음과 같습니다.

CsrfFilter는 client로부터 request가 있을 경우 csrf token을 발급합니다. 그 후 client는 PATCH, POST, PUT, DELETE request를 보낼 때는 csrk token을 header에 담아서 request를 보내며 server에서는 server에 저장된 csrf값과 비교를 하고 값이 같지 않다면 AccessDeniedException을 발생시키고 값이 같다면 해당 request를 처리해줍니다.

CsrfFilter 활성화/비활성화

CsrfFilter의 활성화/비활성화는 다음과 같은 방법으로 설정할 수 있습니다.
해당 설정의 default값은 활성화 되는 것입니다.

http.csrf();  // 활성화
http.csrf().disabled(); // 비활성화

Reference

profile
블로그 이전했습니다. -> https://seongwon.dev/

0개의 댓글