Backend/스프링부트 (Spring Boot)

Spring Boot | CSRF 설정 (Spring Security)

아기상어 뚜루루뚜루 2021. 8. 6. 15:44
반응형

▶ CSRF(Cross site request forgery)

크로스 사이트 요청 위조, XSRF라고도 말한다.
웹 사이트의 취약점을 이용하여 이용자가 의도하지 하지 않은 요청을 통한 공격을 의미한다.

 

실제 서버에서 받아온 페이지가 아닌 위조된 페이지에서 요청을 보내는 행위이며,

이 행위를 방지하기 위해 서버에 들어온 요청이 실제 서버에서 허용한 요청이 맞는지

확인하기 위해서 토큰을 생성하여 검증한다.

 

# 자세한 내용은

https://ko.wikipedia.org/wiki/%EC%82%AC%EC%9D%B4%ED%8A%B8_%EA%B0%84_%EC%9A%94%EC%B2%AD_%EC%9C%84%EC%A1%B0

 

 

Maven
version의 경우 https://mvnrepository.com/에서 찾아서 사용해도 된다.

 

<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
    <version>5.5.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-web -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-web</artifactId>
    <version>5.5.1</version>
</dependency>

 

 

Gradle

 

implementation 'org.springframework.security:spring-security-config'
implementation 'org.springframework.security:spring-security-web'

 

 

WebSecurity 설정

WebSecurityConfigurerAdapter를 상속받아 configure 메서드를 오버라이드 한다.

모든 요청에 CSRF Token을 생성한다.

 

import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.csrf.CookieCsrfTokenRepository;

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
	@Override
	protected void configure(HttpSecurity http) throws Exception {
		http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
	}
}

 

 

post 폼 전송 시 csrf token값을 서버에 요청할 때 같이 넘겨준다.

 

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

 

 

브라우저 Cookies에서도 Token이 생성된 걸 확인할 수 있다.

 

 

반응형