▼ Backend/스프링 (Spring)

Spring Boot | CSRF 설정 (Spring Security)

Valar 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이 생성된 걸 확인할 수 있다.

 

 

반응형