You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
사이트 간 요청 위조. 인증된 유저의 계정을 사용해 유저의 의도와는 무관하게 악의적인 변경 요청을 만들어 보내는 기법
CSRF 공격과 방지
스프링 시큐리티의 경우 CSRF Filter 를 통해 검사
페이지를 제공하는 서버와 데이터를 제공하는 서버가 다를 경우 CSRF 토큰을 포함하지 않는 요청을 허용해야함으로 이를 대체할 방어 전략이 필요하다.
CORS - Cross-Origin Resource Sharing
교차 출처 리소스 공유. 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제
Preflight Request
교차 출처 리소스 공유 사전 요청. 교차 출처 HTTP 요청 전에 서버 측에서 그 요청의 메서드와 헤더에 대해 인식하고 있는지 체크하기 위한 요청
Spring Security CORS Setting
@EnableWebSecurity@Configuration@RequiredArgsConstructorpublicclassSecurityConfig {
@BeanpublicSecurityFilterChainsecurityFilterChain(HttpSecurityhttp) {
// CORS 허용// 페이지를 제공하는 서버(Origin Server)와 데이터를 제공하는 서버(Other Server)가 다를 경우// Other Server 에서 CSRF 토큰을 제공할 수 없으므로 CSRF Filter 인증을 사용하지 않음http.csrf(AbstractHttpConfigurer::disable)
.cors(corsConfigurer -> corsConfigurer.configurationSource(corsConfigurationSource()));
// 페이지 권한 설정http.authorizeHttpRequests(authorizeHttpRequests -> authorizeHttpRequests.anyRequest().permitAll());
returnhttp.build();
}
@BeanpublicCorsConfigurationSourcecorsConfigurationSource() {
CorsConfigurationconfiguration = newCorsConfiguration();
// 지정한 출처의 애플리케이션의 요청을 허용configuration.addAllowedOriginPattern("http://localhost:5173");
configuration.addAllowedHeader("*");
configuration.addAllowedMethod("*");
UrlBasedCorsConfigurationSourcesource = newUrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
returnsource;
}
}