CSRF 보호를 비활성화 하는 것은 보안에 취약할 수 있습니다.

 

CSRF(Cross-Site Request Forgery) 공격은 웹 애플리케이션의 신뢰할 수 있는 사용자가 공격자에 의해 의도하지 않은 프로필 업데이트나 메시지 전송과 같은 민감한 작업을 포함해 응용 프로그램의 상태를 변경할 수 있는 모든 행위를 수행하도록 강제할 수 있을 때 발생합니다.

공격자는 사용자/피해자가 권한 있는 작업에 해당하는 링크를 클릭하도록 속이거나 숨겨진 웹 요청이 포함된 악의적인 웹 사이트를 방문하도록 속일 수 있으며 웹 브라우저에는 자동으로 쿠키가 포함되므로 작업이 인증되고 취약할 수 있습니다.

스스로에게 물어보십시오

  • 웹 애플리케이션이 유저를 인증할 때 쿠키를 사용합니다.
  • 웹 애플리케이션에 사용자가 인증 후에 수행할 수 있는 민감한 작업이 있습니다.
  • HTTP POST 또는 HTTP DELETE 과 같은 요청을 수행하여 웹 애플리케이션의 상태/자원을 수정할 수 있습니다.

이러한 상황에 해당되는 경우, CSRF 보호를 비활성화 하는 것은 위험할 수 있습니다.

추천되는 안전한 코딩 관습

  • CSRF 공격에 대한 보호를 강하게 권장합니다.
  • 물론 모든 민감한 연산들은 GET 과 같은 정보 검색을 위해 고안된 안전한 HTTP 메서드들 로 수행되서는 안됩니다.

취약한 코드의 예

스프링 시큐리티 는 기본적으로 비활성화할 수 있는 CSRF 공격에 대한 보호 기능을 제공합니다.

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable(); // 취약함: CSRF 보호가 전체적으로 비활성화됩니다.
    // or
    http.csrf().ignoringAntMatchers("/route/"); // 취약함: CSRF 보호가 특정 경로에 대해 비활성화 됩니다.
  }
}

규칙을 준수한 해결책

스프링 시큐리티 의 CSRF 보호는 기본적으로 활성화되어있습니다. 이를 비활성화 하지 마세요.

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    // http.csrf().disable(); // Compliant
  }
}

참고


If you like SONARKUBE, don’t forget to give me a star. :star2:

원문으로 바로가기

Star This Project