时间:2021-05-19
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@EnableWebSecuritypublic class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/login").permitAll() .anyRequest().authenticated() .and() ... http.csrf().disable(); //取消csrf防护 }}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
这里使用的是spring-security和原生的jasigcas包来进行整合,为什么没有直接使用spring提供的spring-security-cas,后面
spring-security里自带了oauth2,正好YIIU里也用到了spring-security做权限部分,那为何不直接集成上第三方登录呢?然后我开始了
在本教程中,我们将研究标准Spring框架和SpringBoot之间的区别。我们将重点讨论Spring的模块,如MVC和Security,在核心Spring中使
复制代码代码如下:packageother;importjava.security.MessageDigest;importjava.security.NoSu
情景描述一个聚合项目spring-security-tutorial,其中包括4个module,pom如下所示: