728x90
CSRF (Cross Site Request Forgery, 사이트 간 요청 위조)
- 웹 애플리케이션의 보안 취약점으로 공격자가 사용자로 하여금 이미 인증된 다른 사이트에 대해 원치 않는 작업을 수행하게 만드는 기법을 의미
- 이 공격은 사용자의 브라우저가 자동으로 보낼 수 있는 인증 정보, 예를 들어 쿠키나 기본 인증 세션을 이용하여 사용자가 의도하지 않은 요청을 서버로 전송하게 만듦
- 이는 사용자가 로그인한 상태에서 악의적인 웹사이트를 방문하거나 이메일 등을 통해 악의적인 링크를 클릭할 때 발생 가능
CSRF 진행 순서
CSRF 기능 활성화
- CSRF 기능 활성화 → 별도 설정하지 않아도 활성화 상태로 초기화
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.csrf(Customizer.withDefaults());
return http.build();
}
- 토큰은 서버에 의해 생성되어 클라이언트의 세션에 저장되고 폼을 통해 서버로 전송되는 모든 변경 요청에 포함되어야 하며 서버는 이 토큰을 검증하여 요청의 유효성을 확인
- 기본 설정은 'GET', 'HEAD', 'TRACE', 'OPTIONS’ 와 같은 안전한 메서드를 무시하고 'POST', 'PUT', 'DELETE’ 와 같은 변경 요청 메서드에 대해서만 CSRF 토큰 검사 수행
- 중요한 점은 실제 CSRF 토큰이 브라우저에 의해 자동으로 포함되지 않는 요청 부분에 위치해야 한다는 것으로서 HTTP 매개변수나 헤더에 실제 CSRF 토큰을 요구하는 것이 CSRF 공격을 방지하는데 효과적이라 할 수 있음
- 반면에 쿠키에 토큰을 요구하는 것은 브라우저가 쿠키를 자동으로 요청에 포함시키기 때문에 효과적이지 않다고 볼 수 있음
CSRF 기능 비활성화
- csrf 기능 전체 비활성화
- 쿠키나 세션을 이용한 공격이기 때문에 쿠키 or 세션을 사용하지 않는 곳에서는 굳이 CSRF의 기능을 사용하지 않아도 됨
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.csrf(csrf -> csrf.disabled());
return http.build();
}
- csrf 보호가 필요하지 않은 특정 엔드포인트만 비활성화
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.csrf(csrf -> csrf.ignoreRequestMatchers("경로"));
return http.build();
}
728x90
'Language > Spring Security' 카테고리의 다른 글
CSRF 통합 (0) | 2024.07.29 |
---|---|
CSRF 토큰 유지 및 검증 (0) | 2024.07.29 |
CORS (Cross Origin Resource Sharing, 교차 출처 리소스 공유) (0) | 2024.07.29 |
예외 필터 - ExceptionTranslationFilter() (0) | 2024.07.29 |
예외 처리 - ExceptionHandling() (0) | 2024.07.29 |