Spring Boot/Spring Security

[Spring Security] CSRF

수수한개발자 2022. 6. 29.
728x90

CSRF (Cross Site Request Forgery)

CSRF 공격은 웹 어플리케이션 취약점 중 하나로 인터넷 사용자(희생자)가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 만드는 공격입니다.

 

쇼핑몰이 있습니다. 공격자, 사용자(피해자), 서버 이렇게 있습니다.

이때 사용자(피해자)가 로그인 되어있습니다. 공격자가 사용자에게 링크를 보내서 사용자가 클랙한다면

공격자용 홈페이지에 접속하게 됩니다.

예를 들면 공격자용 코드는 다음과 같습니다.

<form action="http://shop.com/api/content" method="post">
    <input type="hidden" name="body" value="지금 가입하면 10만원 할인 쿠폰 증정." />
    <input type="submit" value="Click Me"/>
</form>

이런식으로 광고같은 거를 누르면 사용자가 공격용 페이지가 열리면서 사용자의 승인 없이 배송지같은게 등록됨으로써 공격이 완료 됩니다.

 

그래서 스프링 시큐리티는 CsrfFilter라는 필터를 만들어서 이것을 방지하고 있습니다.

CsrfFilter

• 모든 요청에 랜덤하게 생성된 토큰을 HTTP 파라미터로 요구

• 요청 시 전달되는 토큰 값과 서버에 저장된 실제 값과 비교한 후 만약 일치하지 않으면 요청은 실패한다.

 Client

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

• HTTP 메소드 : PATCH, POST, PUT, DELETE 요청시에는 crsf 토큰명과 값을 가지고 요청을 해야 합니다.

 

 Spring Security

• http.csrf() : 기본 활성화되어 있음

• http.csrf().disabled() : 비활성화

728x90

댓글