spring security CSRF防护

spring security CSRF防护CSRF是指跨站请求伪造(Cross-siterequestforgery),是web常见的攻击之一。从SpringSecurity4.0开始,默认情况下会启用CSRF保护,以防止CSRF攻击应用程序,SpringSecurityCSRF会针对PATCH,POST,PUT和DELETE方法进行防护。我这边是springboot项目,在启用了@EnableWebSecurity…

大家好,又见面了,我是你们的朋友全栈君。

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,针对表单提交,可以在表单中增加如下隐藏域:

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

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

<html> 
<head> 
	<meta  name = “_csrf” content = “${_csrf.token}” /> 
	<!-- 默认标题名称是X-CSRF-TOKEN  --> 
	<meta  name = “_csrf_header”  content = “${_csrf.headerName}” /> 
</ 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防护
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/148894.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • HotSpot源码分析之类模型

    HotSpot源码分析之类模型

    2020年11月20日
  • Python中的log文件(详细教程)

    Python中的log文件(详细教程)

  • LARS回归算法的几何意义

    LARS回归算法的几何意义LARS算法的几何意义 1   LARS算法简介  Efron于2004年发表在AnnalsofStatistics的文章LEASTANGLEREGRESSION中提出LARS算法,其核心思想是提出一种新的solutionpath(求解路径),即在已经入选的变量中,寻找一个新的路径,使得在这个路径上前进时,当前残差与已入选变量的相关系数都是相同的,直到找出新的比当前残差相

  • 编程题:分苹果_同学分苹果的小学题

    编程题:分苹果_同学分苹果的小学题题目描述n只奶牛坐在一排,每个奶牛拥有ai 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出-1。输入描述:每个输入包含一个测试用例。每个测试用例的第一行包含一个整数n(1&lt;=n&lt;=100),接下来的一行包含n个整数ai(1&l…

    2022年10月12日
  • 趣味编程游戏_全脑开发训练100个游戏

    趣味编程游戏_全脑开发训练100个游戏在信息技术迅猛发展的时代,操纵计算机,与电脑对话的能力已经成了事实上的技能标配,也已经深深地融入了我们每个人的生活当中。游戏行业也不例外,近几年,随着全民编程的热潮,许多游戏厂商也纷纷把编程融入自己的游戏当中,甚至推出了许多专门为编程爱好者/编程学习者制作的编程解密游戏。今天要推荐的九个游戏,可谓风格各异,老少咸宜,不论你是对编程完全陌生的新手,还是硬核老鸟,一定能找到一款适合你的游戏。话…

  • Windows10安装WDK报错setup cannot locate windows debugging wdk integration-x86_en-us.msi

    Windows10安装WDK报错setup cannot locate windows debugging wdk integration-x86_en-us.msisetupcannotlocatewindowsdebuggingwdkintegration-x86_en-us.msiIE使用了代理导致的

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号