spring security CSRF防护的示例代码

网友投稿 405 2023-01-12


spring security CSRF防护的示例代码

CSRF是指跨站请求伪造(Cross-site request forgery),是web常见的攻击之一。

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

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

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

http://

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

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

head>

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

var token = $("meta[name='_csrf']").attr("content");

var header = $("meta[name='_csrf_header']").attr("content");

$.ajax({

url:url,

type:'POST',

async:false,

dataType:'json', //返回的数据格式:json/xml/html/script/jsonp/text

beforeSend: function(xhr) {

xhr.setRequestHeader(header, token); //发送请求前将csrfToken设置到请求头中

},

success:function(data,textStatus,jqXHR){

}

});

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

@Configuration

@EnableWebSecurity

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override

protected void configure(HttpSecurity http) throws Exception {

http.authorizeRequests()

.antMatchers("/login").permitAll()

.anyRequest().authenticated()

.and()

...

http.csrf().disable(); //取消csrf防护

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:利用Redis实现延时处理的方法实例
下一篇:Spring实现拥有者权限验证的方法示例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~