很多朋友在学习spring security的时候,会将cors(跨站资源共享)和csrf(跨站请求伪造)弄混,以为二者是一回事。其实不是,先解释一下:
当我们使用spring security的时候,这种csrf漏洞默认的被防御掉了。但是你会发现在跨域请求的情况下,我们的post、delete、put等http请求方式失效了。所以在笔者之前的文章中,我们使用http.csrf.disable()
暂时关闭掉了csrf的防御功能,但是这样是不安全的,那么怎么样才是正确的做法呢?就是本文需要向大家介绍的内容。
通常的csrf攻击方式如下:
首先,我们要先开启防护功能,在用户登陆操作之后,生成的csrf token就保存在cookies中。
public class websecurityconfig extends websecurityconfigureradapter { @override protected void configure(httpsecurity http) throws exception { http.csrf() .csrftokenrepository(cookiecsrftokenrepository.withhttponlyfalse()) .ignoringantmatchers("/authentication"); .and() ... } }
至此,我们生成了csrf token保存在了cookies中,浏览器向服务端发送的http请求,都要将csrf token带上,服务端校验通过才能正确的响应。这个校验的过程并不需要我们自己写代码实现,spring security会自动处理。但是我们需要关注前端代码,如何正确的携带csrf token。
在thymeleaf模板中可以使用如下方式,在发送http请求的时候携带csrf token。如果是前后端分离的应用,或者其他模板引擎,酌情从cookies中获取csrf toekn。
var headers = {}; headers['x-csrf-token'] = "${_csrf.token}"; $.ajax({ headers: headers, });
$.ajax({ data: { "_csrf": "${_csrf.token}" } });
<input type="hidden" name="${_csrf.parametername}" value="${_csrf.token}">
如对本文有疑问, 点击进行留言回复!!
Algebra:Chapter 0 - 预备知识: 集合论和categories
springboot + vue上传图片在服务器并实现在线预览
请谨慎使用增强for循环,刚接触Java值得一看(手动狗头)
【Nginx】还不会使用Nginx解决跨域问题?肝这一篇就够了!!
针对于在apk文件反编译中出现java.nio.file.NoSuchFileException: classes.dex的解决办法
网友评论