• 技术文章 >Java >java教程

    SpringSecurity处理CSRF攻击的方法介绍

    不言不言2019-03-06 15:37:51转载1171

    本篇文章给大家带来的内容是关于Django的FBV和CBV的示例讲解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    CSRF漏洞现状

    CSRF(Cross-site request forgery)跨站请求伪造,也被称为One Click Attack或者Session Riding,通常缩写为CSRF或XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
    CSRF是一种依赖web浏览器的、被混淆过的代理人攻击(deputy attack)。

    POM依赖

    <!-- 模板引擎 freemarker -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>
    <!-- Security (只使用CSRF部分) -->
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-web</artifactId>
    </dependency>

    配置过滤器

    @SpringBootApplication
    public class Application {
    
      public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
      }
      
      /**
       * 配置CSRF过滤器
       *
       * @return {@link org.springframework.boot.web.servlet.FilterRegistrationBean}
       */
      @Bean
      public FilterRegistrationBean<CsrfFilter> csrfFilter() {
        FilterRegistrationBean<CsrfFilter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new CsrfFilter(new HttpSessionCsrfTokenRepository()));
        registration.addUrlPatterns("/*");
        registration.setName("csrfFilter");
        return registration;
      }
    }

    在form请求中添加CSRF的隐藏字段

    <input name="${(_csrf.parameterName)!}" value="${(_csrf.token)!}" type="hidden" />

    在AJAX请求中添加header头

    xhr.setRequestHeader("${_csrf.headerName}", "${_csrf.token}");

    jQuery的Ajax全局配置

    jQuery.ajaxSetup({
      "beforeSend": function (request) {
        request.setRequestHeader("${_csrf.headerName}", "${_csrf.token}");
      }
    });

    以上就是SpringSecurity处理CSRF攻击的方法介绍的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:segmentfault,如有侵犯,请联系admin@php.cn删除
    上一篇:Oracle JDK和OpenJDK之间的区别是什么? 下一篇:Spring Cloud Gateway的全局异常处理的介绍(代码示例)
    大前端线上培训班

    相关文章推荐

    • SpringBoot和SpringSecurity处理Ajax登录请求的问题• SpringBoot集成Jasypt安全框架以及配置文件内容加密(代码示例)• 基于spring的redis配置(单机和集群模式)• SpringBoot跨域的介绍(代码示例)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网