sm 기술 블로그
[스프링 시큐리티] CSRF(cross site request forgery) 본문
인증구조
기본적으로 인증은 다음과 같이 진행된다.
상세하게 설명해보면 한번 인증 후 다시 인증할 때는 토큰을 이용한다.
CSRF공격이 이루어지면
다음과 같이 해커가 인증된 토큰을 훔쳐 인증에 사용한다.
최악에 상황에서는 금융 정보를 훔쳐 인터넷으로 계좌이체를 자유롭게 하게 된다.
package com.mysite.sbb;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/**").permitAll()
.and()
.csrf().ignoringAntMatchers("/h2-console/**")
;
return http.build();
}
}
- and() 는 http 객체의 설정을 이어서 할 수 있는 메서드
- antMatchers는 특정한 경로를 지정한다.
- antMatchers는 특정한 경로를 무시한다.
- 따라서 .csrf().ignoringAntMatchers("/h2-console/**")은 h2로 시작하는 URL은 CSRF검증을 하지 않는다.
- 무시해주는 이유는 h2로 로그인시 403오류가 발생하기 때문이다(CSRF 기능이 동작하기 때문으로 발생하는 문제)
X-Frame-Options
해결을 한다 해도
다음과 같은 오류가 발생할 수 있다.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.header.writers.frameoptions.XFrameOptionsHeaderWriter;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/**").permitAll()
.and()
.csrf().ignoringAntMatchers("/h2-console/**")
.and()
.headers()
.addHeaderWriter(new XFrameOptionsHeaderWriter(
XFrameOptionsHeaderWriter.XFrameOptionsMode.SAMEORIGIN))
;
return http.build();
}
}
'스프링부트' 카테고리의 다른 글
[스프링 부트] 유효값과 예외 처리 (0) | 2022.07.23 |
---|---|
[스프링 시큐리티] 회원가입 (0) | 2022.07.23 |
[스프링 시큐리티] 설치 및 설정 (0) | 2022.07.23 |
[스프링부트] ID와 GeneratedValue (0) | 2022.07.17 |
[스프링부트] @JsonIgnore (0) | 2022.07.17 |
Comments