SpringSecurity - CSRF(CrossSiteRequestForgery)

박민수·2023년 11월 14일
0

Spring

목록 보기
38/46
post-thumbnail

개요

이 글에서는 CSRF가 무엇인지와 SpringSecurity에서 CSRF 공격을 방지하기 위한 방법을 정리하고자 한다.

CSRF(CrossSiteRequestForgery)란?

CSRF(CrossSiteRequestForgery)란 사이트 간 요청 위조의 줄임말이며, 웹 애플리케이션 취약점 중 하나로 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 해서 특정 웹페이지를 보안에 취약하게 한다거나 수정, 삭제 등의 작업을 하게 만드는 공격 방법이다.

SpringSecurity에서 CSRF 공격 방지법

SpringSecurity에서는 CSRF 공격을 방지하기 위해 CSRF Filter라는 Filter를 제공하고 있다. 해당 필터는 모든 요청에 랜덤하게 토큰을 생성해서 클라이언트에게 발급하고, 이후에 클라이언트가 서버로 접속하기 위해서는 서버가 발급한 토큰을 반드시 가져와야 한다. 만약 요청 시 전달되는 토큰 값과 실제 서버에 저장된 토큰 값을 비교한 후 일치하지 않으면 요청은 실패한다.

토큰을 발급한 이후에는 form 태그의 hidden 타입으로 서버에서 발급한 토큰명과 토큰 값을 아래와 같이 설정할 수 있다. 이후에 HTTP 메소드(PATCH, POST, PUT, DELETE)로 요청할 때 반드시 서버에서 발급한 csrf 토큰명과 토큰 값을 가지고 요쳥해야 한다.

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

※ 참고 - thymeleaf를 사용하거나, 스프링의 form 태그를 사용하는 경우 POST 방식으로 요청을 할 때, 우리가 별도로 csrf 토큰을 생성하지 않아도 자동으로 생성해준다.

http.csrf()

SpringSecurity에서 기본적으로 http.csrf() 기능을 활성화 해놓아서 우리가 따로 API를 지정하지 않아도 된다. 만약, csrf 기능을 비활성화 하고 싶다면 http.csrf().disabled()를 통해 비활성화 할 수 있다.


참조

profile
안녕하세요 백엔드 개발자입니다.

0개의 댓글