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防护的示例代码