programing

application.properties를 사용하여 봄에 CSRF를 비활성화하려면 어떻게 해야 합니까?

powerit 2023. 3. 14. 21:56
반응형

application.properties를 사용하여 봄에 CSRF를 비활성화하려면 어떻게 해야 합니까?

다음 속성이 있습니다.

security.enable-csrf=false

속성을 에 추가하는 경우 BUT csrf 보호는 아직 유효합니다.application.properties.

동작하는 것은, 그것을 프로그램적으로 무효로 하는 것입니다.

하지만 속성 구성을 선호합니다.왜 안 되는 거죠?

@Configuration
public class AuthConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
    }

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

    }
}

처럼WebSecurityConfigurerAdapter필수 접근 방식을 사용하여 가치의 주입을 할 수 있습니다.security.enable-csrfCSRF가 false일 경우 CSRF를 disable로 합니다.맞아요, 이건 처음부터 할 수 있을 것 같아요.

@Configuration
public class AuthConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private UserDetailsService userDetailsService;

    @Value("${security.enable-csrf}")
    private boolean csrfEnabled;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
       super.configure(http);

       if(!csrfEnabled)
       {
         http.csrf().disable();
       }
    }
}

dev spring profile이 활성화 되어 있을 때 application.yml에서 변수를 false로 설정했습니다.단, nosecurity라는 프로파일을 작성할 수도 있습니다.이 프로세스는 매우 간단합니다.

--- application.yml ---

# Production configuration
server:
  port: ${server.web.port}
admin.email: ${admin.email}
#etc
---
spring:
  profiles: dev

security.enable-csrf: false

#other Development configurations

니즈에 맞았으면 좋겠다

2017년 12월 17일 갱신

Spring Boot 멤버의 코멘트에 따라 이 문제는 Spring의 새로운 버전에서 수정되었습니다.나는 그것을 버전으로 가지고 있었다.1.5.2.RELEASE버전 1.5.9에서는 그런 것 같습니다.RELEASE(버전 2 이전까지 안정된 최신 버전)는 이미 고정되어 있으며 기본적으로는 csrf는 디세이블이며 다음과 같이 이니블로 할 수 있습니다.security.enable_csrf: true따라서 가능한 해결책은 버전으로의 업그레이드일 수 있습니다.1.5.9.RELEASE아키텍처가 상당히 다를 수 있는 버전2로 메이저를 만들기 전.

업데이트:

spring-boot 1.x에서 application.properties를 사용하여 CSRF를 디세블로 하는 데 문제가 있는 것 같습니다(또한 이 케이스를 오픈한 Eliux 덕분입니다).

따라서 임베디드 Tomcat을 사용한Spring-boot 1.5.7 솔루션은 SecurityConfig 클래스를 통한 CSRF를 디세블로 하는 것입니다(이 방법으로 Tomcat otb 기본 인증을 유지합니다).

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // Note: 
        // Use this to enable the tomcat basic authentication (tomcat popup rather than spring login page)
        // Note that the CSRf token is disabled for all requests (change it as you wish...)
        http.csrf().disable().authorizeRequests().anyRequest().authenticated().and().httpBasic();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        // Add here any custom code you need in order to get the credentials from the user...  
        auth.inMemoryAuthentication()
            .withUser("myUserName")
            .password("myPassword")
            .roles("USER");
    }
} 

spring-security.xml 파일에서 다음 행을 사용하여 디세블로 할 수 있었습니다.

<보안: securityf disabled="true"/>

언급URL : https://stackoverflow.com/questions/44824382/how-to-disable-csrf-in-spring-using-application-properties

반응형