对于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发送给服务器。

菜鸡写日记!

CSRF攻击的原理和spring security对CSRF攻击的解决方法相关推荐

  1. springsecurity sessionregistry session共享_要学就学透彻!Spring Security 中 CSRF 防御源码解析...

    今日干货 刚刚发表查看:66666回复:666 公众号后台回复 ssm,免费获取松哥纯手敲的 SSM 框架学习干货. 上篇文章松哥和大家聊了什么是 CSRF 攻击,以及 CSRF 攻击要如何防御.主要 ...

  2. 要学就学透彻!Spring Security 中 CSRF 防御源码解析

    上篇文章松哥和大家聊了什么是 CSRF 攻击,以及 CSRF 攻击要如何防御.主要和大家聊了 Spring Security 中处理该问题的几种办法. 今天松哥来和大家简单的看一下 Spring Se ...

  3. Spring Security 的 CSRF 的相关资料

    近期,因为需要研究 Spring Security 的安全机制,因为 Spring Security 说可以帮助避免 CSRF 攻击. 因此特地考古了相关的内容. 简单点解释就是 CSRF 盗用了你的 ...

  4. 关于spring mvc时间类型绑定失败解决方法

    关于spring mvc时间类型绑定失败解决方法 前端页面用的easyui,有个日期字段: <input name="sdt" class="easyui-date ...

  5. react+spring 记录跨域问题的解决方法

    react+spring 记录跨域问题的解决方法 参考文章: (1)react+spring 记录跨域问题的解决方法 (2)https://www.cnblogs.com/cq-jiang/p/954 ...

  6. android studio 导入模块SDK 以及该模块中继承application的类与原工程继承application的类存在冲突 解决方法

    android studio 导入模块SDK 以及该模块中继承application的类与原工程继承application的类存在冲突 解决方法 导入某修改后的海康视频SDK(老师给的),并修改相关文 ...

  7. CoppeliaSim(原V-REP)教育版不给下载的解决方法

    CoppeliaSim(原V-REP)教育版不给下载的解决方法 首先进入CoppeliaSim官网 网址:https://www.coppeliarobotics.com/downloads http ...

  8. 服务器正在升级无法修改个性签名,原神无法改名字和修改签名解决方法

    原神改名字的入口关闭了,玩家们暂时无法改名字和修改签名,有不少玩家想要知道为什么会这样,想要改名字应该怎么办,具体的原因和问题的解决方法接下来会给大家分享,玩家们也可以多看看下方的问题分析. 原神无法 ...

  9. spring security 防CSRF攻击

    2019独角兽企业重金招聘Python工程师标准>>> 一.介绍:     CSRF(Cross-site request forgery跨站请求伪造,也被称为"One C ...

最新文章

  1. 计算机应用专业能评自动化工程师吗,报考自动化控制工程师中级职称需要哪些条件?...
  2. servlet和jsp中间的交互
  3. 小批量梯度下降算法步骤_TensorFlow从0到1 - 6 - 解锁梯度下降算法
  4. Spring @Transactional实际如何工作?
  5. 小谈Online-game服务器端设计(3)
  6. 【搜索引擎】全文索引数据结构和算法
  7. 5-10年的DBA如何独当一面?这10个建议送给你(附图书工具推荐)
  8. ApacheCN 学习资源汇总 2019.3 1
  9. PHP读取某站点的链接的函数
  10. 2021高考成绩查询截图,科目四2021模拟考试成绩截图
  11. 用vscode创建一个c项目_Visual Studio Code创建C#项目
  12. Nginx反向代理及负载均衡实现过程部署
  13. (转)财富取决于极少的大高潮,幸福取决于较多的小高潮
  14. ubuntu启动时的初始化信息二
  15. 使用eclipse配置adt
  16. Access与Trunk
  17. 2022-2027年中国会议行业市场深度分析及投资战略规划报告
  18. 分享几个在线网站备案查询
  19. OJ每日一练——过滤多余的空格
  20. 使用pygame制作贪吃蛇小游戏

热门文章

  1. Excel公式-TEXT函数使用
  2. (三)零基础入门C语言 --- C语言之入门课程
  3. Nagios配置说明
  4. Ubuntu18+ 使用redshift调色温 夜间闪烁
  5. Java-web css笔记
  6. 学习linux必学的内部web网站搭建——三分钟OK!
  7. 【Linux4.1.12源码分析】协议栈gro收包之MAC层处理
  8. 图像处理中的边缘检测
  9. 几种有趣的电路设计(阻容降压,防过压,LLC,PFC,正激和反激电路)
  10. 计算机网考里操作题发邮件,计算机网考操作题题型.doc