spring security CSRF防护的示例代码

  

CSRF是指跨站请求伪造(跨站点请求伪造)是web常见的攻击之一。
  

  

从Spring Security 4.0开始,默认情况下会启用CSRF保护,以防止CSRF攻击应用程序,Spring Security CSRF会针对补丁,POST、PUT和DELETE方法进行防护。
  

  

我这边是弹簧启动项目,在启用了@EnableWebSecurity注解后,csrf保护就自动生效了。
  

  

所以在默认配置下,即便已经登录了,页面中发起补丁,POST、PUT和DELETE请求依然会被拒绝,并返回403年,需要在请求接口的时候加入csrfToken才行。
  

  

如果你使用了freemarker之类的模板引擎或者jsp,针对表单提交,可以在表单中增加如下隐藏域:

        & lt;输入类型==" $ {_csrf“隐藏”的名字。parameterName} " value=https://www.yisu.com/zixun/" $ {_csrf.token} "/>      

如果您使用的是JSON,则无法在HTTP参数中提交CSRF令牌。相反,您可以在HTTP头中提交令牌。一个典型的模式是将CSRF令牌包含在元标记中。下面显示了一个JSP示例:

        & lt; html>   & lt; head>   & lt;元名称==" $ {_csrf“_csrf”内容。令牌}"/比;   & lt; !——默认标题名称是X-CSRF-TOKEN——比;   & lt;元名称==" $ {_csrf“_csrf_header”内容。headerName} "/比;   & lt;/head>   之前      

然后,您可以将令牌包含在所有Ajax请求中。如果您使用jQuery,可以使用以下方法完成此操作:

        var牌=$(“元[name=' _csrf ']”) .attr(“内容”);   头=$ var(“元[name=' _csrf_header ']”) .attr(“内容”);   . ajax({美元   url: url、   类型:“文章”,   异步:假的,   数据类型:json,//返回的数据格式:json/xml/html/脚本/jsonp/文本   beforeSend:函数(xhr) {   xhr。setRequestHeader(头,令牌);//发送请求前将csrfToken设置到请求头中   },   成功:函数(数据、textStatus jqXHR) {   }   });   之前      

如果你不想启用CSRF保护,可以在spring security配置中取消CSRF,如下:

        @ configuration   @EnableWebSecurity   公开课WebSecurityConfig延伸WebSecurityConfigurerAdapter {   @Override   保护无效配置(HttpSecurity http){抛出异常   http.authorizeRequests ()   .antMatchers(“/登录”).permitAll ()   .authenticated .anyRequest () ()   , ()   …   .disable http.csrf () ();//取消csrf防护   }   }   之前      

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

spring security CSRF防护的示例代码