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防护
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • OpenGL3D迷宫场景设计「建议收藏」

    OpenGL3D迷宫场景设计「建议收藏」OpenGL实现的3D迷宫场景,五角星粒子系统和雨雪粒子系统

    2022年6月6日
    37
  • layout_gravity和gravity的用法

    layout_gravity和gravity的用法也谈layout_gravity和gravity的用法相信对于Android的初学者来说,大家都曾经被layout里这两个极其相似的属性迷惑过。简单使用一下搜索工具,我们就不难找到下面这样的答案:layout_gravity表示组件自身在父组件中的位置gravity            表示组件的子组件在组件中的位置看似很简单嘛~)貌似大伙瞅一眼就明白了。

    2022年7月15日
    16
  • 最简单的三极管音频放大电路

    最简单的三极管音频放大电路最简单的三极管音频放大电路最简单的三极管音频放大电路 调节R1大小,使在最大输出时信号不失真即可,减小R可输出更大的功率。如果有万用表,可将C极电压调为电源电压的1/2左右。        图一固定偏置,电源电压对偏置电流影响很大 基本的共发射极电路   require.async([‘wkcommon:widget/ui

    2022年6月5日
    82
  • mhdd测试hdd硬盘软件,硬盘检测工具mhdd

    mhdd测试hdd硬盘软件,硬盘检测工具mhdd硬盘检测工具mhdd是一款能够修复坏道的专业硬盘检测工具,MHDD硬盘检测工具可以不依赖于主板BIOS直接访问IDE口,可以访问128G的超大容量硬盘,即使你用的是286电脑,无需BIOS支持,也无需任何中断支持。且MHDD还能够帮使用者修复坏轨,让使用者能够继续延续该硬盘的生命余光。软件功能:1、无论以CHS还是以LBA模式,都可以访问到128G的超大容量硬盘(可访问的扇区范围从512到3743…

    2022年7月12日
    18
  • Myabtis-plus中IService接口的使用

    Mybatis-plus的IService接口:IService接口解释,我们可以看到IService接口就是有一大堆方法接口。IService的使用:IService的使用需要另外两个接口的配合:baseMapper和ServiceImpl第一步:实现basemapper接口publicinterfaceAdminMapperextendsBaseMapper<Admin>{}第二步:编写service类publicinterfaceAdminServiceex

    2022年4月8日
    300
  • 3DE平台基础_系统架构师多少分过

    3DE平台基础_系统架构师多少分过3DE平台系统架构

    2022年8月5日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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