服务器之家

服务器之家 > 正文

spring security CSRF防护的示例代码

时间:2021-07-20 16:06     来源/作者:yjclsx

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才行。

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

?
1
<input type = “hidden” name = “${_csrf.parametername}” value = “${_csrf.token}” />

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

?
1
2
3
4
5
6
<html>
<head>
  <meta name = “_csrf” content = “${_csrf.token}” />
  <!-- 默认标题名称是x-csrf-token -->
  <meta name = “_csrf_header” content = “${_csrf.headername}” />
</ head>

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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,如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@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防护
  }
}

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

原文链接:https://blog.csdn.net/yjclsx/article/details/80349906

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021德云社封箱演出完整版 2021年德云社封箱演出在线看
2021德云社封箱演出完整版 2021年德云社封箱演出在线看 2021-03-15
返回顶部