当前位置:  开发笔记 > 编程语言 > 正文

Spring Security 3.2针对特定URL的CSRF禁用

如何解决《SpringSecurity3.2针对特定URL的CSRF禁用》经验,为你挑选了3个好方法。

使用Spring security 3.2在我的Spring MVC应用程序中启用CSRF.

我的spring-security.xml


 
 
 ...
 ...
 

尝试为请求URL中包含"verify"的请求禁用CSRF.

MySecurityConfig.java

@Configuration
@EnableWebSecurity
public class MySecurityConfig extends WebSecurityConfigurerAdapter {

private CsrfMatcher csrfRequestMatcher = new CsrfMatcher();

@Override
public void configure(HttpSecurity http) throws Exception {

    http.csrf().requireCsrfProtectionMatcher(csrfRequestMatcher);

}

class CsrfMatcher implements RequestMatcher {
    @Override
    public boolean matches(HttpServletRequest request) {

        if (request.getRequestURL().indexOf("verify") != -1)
            return false;
        else if (request.getRequestURL().indexOf("homePage") != -1)         
            return false;

        return true;
    }
}

}

Csrf过滤器验证从"verify"提交的CSRF令牌,并且当我从http向https提交请求时,抛出无效令牌异常(403).如何在这种情况下禁用csrf令牌身份验证?



1> le0diaz..:

我知道这不是一个直接的答案,但是人们(就像我一样)在搜索这类问题时通常不会指定spring的版本.因此,由于spring security 存在一种允许忽略某些路由的方法:

以下内容将确保CSRF保护忽略:

    任何GET,HEAD,TRACE,OPTIONS(这是默认值)

    我们还明确声明忽略任何以"/ sockjs /"开头的请求

     http
         .csrf()
             .ignoringAntMatchers("/sockjs/**")
             .and()
         ...



2> Andrea..:

我希望我的回答可以帮助别人.我发现这个问题搜索如何在Spring Boot中禁用特定URL的CSFR.

我使用了这里描述的解决方案:http: //blog.netgloo.com/2014/09/28/spring-boot-enable-the-csrf-check-selectively-only-for-some-requests/

这是Spring Security配置,允许我禁用某些URL上的CSFR控件:

@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

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

    // Build the request matcher for CSFR protection
    RequestMatcher csrfRequestMatcher = new RequestMatcher() {

      // Disable CSFR protection on the following urls:
      private AntPathRequestMatcher[] requestMatchers = {
          new AntPathRequestMatcher("/login"),
          new AntPathRequestMatcher("/logout"),
          new AntPathRequestMatcher("/verify/**")
      };

      @Override
      public boolean matches(HttpServletRequest request) {
        // If the request match one url the CSFR protection will be disabled
        for (AntPathRequestMatcher rm : requestMatchers) {
          if (rm.matches(request)) { return false; }
        }
        return true;
      } // method matches

    }; // new RequestMatcher

    // Set security configurations
    http
      // Disable the csrf protection on some request matches
      .csrf()
        .requireCsrfProtectionMatcher(csrfRequestMatcher)
        .and()
      // Other configurations for the http object
      // ...

    return;
  } // method configure


  @Autowired
  public void configureGlobal(AuthenticationManagerBuilder auth) 
      throws Exception {

    // Authentication manager configuration  
    // ...

  }

}

它适用于Spring Boot 1.2.2(以及Spring Security 3.2.6).



3> George Siggo..:

我正在使用Spring Security v4.1。经过大量的阅读和测试之后,我使用xml配置为特定的URL禁用了crcf安全功能。



    

    
        
        
        
        
        
        
    

    
        
            
                
                    
                    
                
                
                    
                    
                
                
                    
                    
                
            
        
    

    //...


通过上述配置,我仅对以开头的所有URL的POST | PUT | DELETE请求启用crcf安全性/rest/

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有