CSRF攻击的原理和spring security对CSRF攻击的解决方法

对于CSRF攻击的原理,直接上图然后解释一下
在这里插入图片描述

一个用户通过浏览器成功登录一个网站,登陆成功后,服务器会返回一个该用户的唯一标识放入浏览器Cookie中,以此作为用户之后操作的唯一凭证。假设此时该用户在此网站中请求一个表单类的网页,这时候用户又打开了另外的一个网站,而这个网站是一个病毒网站,它直接窃取了Cookie信息,当然也包括唯一身份凭证(所以为什么说cookie不推荐保存重要信息,是有原因的),通过唯一身份凭证,病毒网站直接进行用户所做的表单提交,而服务器是通过这个凭证来匹配用户信息的,服务器这时候无法识别病毒网站所做的操作,误以为是用户操作,此时可能造成用户严重损失。
Spring Security作为Spring提供的一个安全框架,使用它时,其内部便已经对CSRF攻击做了相关的防止工作(除了异步请求)。
下面说一下Security对CSRF攻击所作的相关工作:
继续上图,然后解释:

在这里插入图片描述

   **首先在pom.xml中导入**
<!--        security-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

当你在项目中导入了插件后,整个项目就直接被Security管理。之后我们再次登录相关网站,尔后在网站上请求一个会返回表单类的网页,这时候服务器不仅仅会存入一个带唯一标识的Cookie信息,还会带上一个类型为hidden的隐藏输入框,里面封装的就是security提供的另外一个随机唯一身份标识,如图:
在这里插入图片描述

这个value值是随机生成的,而这时病毒网站可以窃取到用户唯一标识,却无法知道给该用户的随机token,这就能防止csrf攻击所造成的影响。
但是有一些情况,security是无法做处理的,比如异步请求,这时候我们需要在代码中做一些处理配置,才能达到相关的防止工作的要求。
下面演示security在异步请求的情况下对防止csrf攻击的一些处理:
首先需要在触发异步请求的前端界面上(index.html)设置以下数据:

<!--访问该页面时,在此处生成CSRF令牌.-->
	<meta name="_csrf" th:content="${_csrf.token}">
	<meta name="_csrf_header" th:content="${_csrf.headerName}">

尔后在发送异步请求的js界面设置:

    发送AJAX请求之前,CSRF令牌设置到请求的消息头中.
    var token = $("meta[name='_csrf']").attr("content");
    var header = $("meta[name='_csrf_header']").attr("content");
    $(document).ajaxSend(function(e, xhr, options){
        xhr.setRequestHeader(header, token);
    });

当刷新当前界面时,会得到token随机标识,
在这里插入图片描述
之后在提交ajax请求的时候会带着随机生成的token发送给服务器。

菜鸡写日记!

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

折翼、csf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值