Security 6.x 기준 CSRF는 기본적으로 enable() 상태이다
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain defaultChain(HttpSecurity http) throws Exception {
http
.csrf(csrf -> csrf.enable()) // 기본값, 메서드는 없음
.authorizeHttpRequests(auth -> auth.anyRequest().authenticated());
return http.build();
}
이걸 언제 disable()로 사용해야 하는가?
https://b1uffer.tistory.com/432
CSRF 예제에서
<form action="/transfer" method="post">
폼 요청이 브라우저 기반 요청임
이 요청은 CSRF 보호 대상이 된다
그래서 토큰 없이 요청하게 되면 403 Forbidden이 뜸
그리고 API를 보면
@GetMapping("/transfer")
public String transferForm(Model model, CsrfToken csrfToken) {
model.addAttribute("_csrf", csrfToken);
return "transfer";
}
얘는 MVC 기반 요청으로, 데이터를 넘기는게 아니라 html을 보여주는 GET 요청이다
Security는 POST / PUT / PATCH / DELETE 와 같은 상태 변경 요청에 대해 CSRF를 검사하기 때문에,
- form 로그인
- 세션 기반 인증
- 브라우저에서 쿠키를 자동으로 전송하는 경우
에는 절대로 csrf.disable() 메서드를 사용하면 안된다
오히려 위와 같은 상황에서는 .csrf 메서드를 아예 빼고 디폴트 상태로 사용하는게 좋다
그렇다면, 언제 csrf를 disable로 사용해야 하는가?
- REST API
- JWT 인증
- 쿠키 기반 세션을 사용하지 않을 때
이 때는 꺼도 된다
Spring Security의 CSRF 예방은 쿠키 기반 인증 공격을 막는다
그런데 REST API와 JWT 인증의 경우
Authorization: Bearer ...
형태로, 쿠키를 쓰지 않기 때문에 애초에 CSRF 공격이 불가능하다. 그래서 꺼도 됨
'Spring Boot > Security' 카테고리의 다른 글
| SecurityFilterChain에 H2 콘솔이 막힐때 (0) | 2026.05.06 |
|---|---|
| 주요 웹 보안 이슈 & Security 방어 전략 : CORS (0) | 2026.05.01 |
| 주요 웹 보안 이슈 & Security 방어 전략 : XSS (0) | 2026.05.01 |
| 주요 웹 보안 이슈 & Security 방어 전략 : CSRF (0) | 2026.05.01 |
| 커스텀 필터 구현 : 구현해보기 (0) | 2026.05.01 |