1.csrf是什么

csrf全称是Cross-site request forgery,http://en.wikipedia.org/wiki/Csrf

危害:使受害用户在不经意间执行了不是用户意愿的请求。最终导致泄密和执行了其他高危害操作。

2.一般防御做法

防御基本原理:本质上是做好用户数据提交的完整性,保证用户提交的内容是用户发起的非篡改过的请求。

通常做法是,在用户在访问页面的时候,通过隐藏于渲染一个token,这个token由服务器在后端渲染。用户在执行变更的提交时,把token作为参数带上。服务器在后端校验token是否合法,是否被使用过。

这样,就保障了用户提交过来的请求是用户本人发起的请求。但这个前提是,当前有效的token没有被泄漏。

具体防范事例可见:http://blog.eyallupu.com/2012/04/csrf-defense-in-spring-mvc-31.html

csrf token的生成

1. 对于需要防止重复提交的场景,token必须只能唯一生成一个并且只能使用一次。可以用uuid或者其他唯一生成的方式。

2. 对于需要在用户会话期间使用的场景,可以基于用户的sessionid+时间加密生成。

csrf token的储存:一般在session中,或者cookie中。

3.如何在spring mvc中实现

如何与spring结合:利用spring的HandlerInterceptorAdapter进行请求的csrf的校验,利用ReuqestDataValueProcessor来进行隐藏input的csrf token渲染。

可参考 http://blog.csdn.net/alphafox/article/details/8947117

4.扩展问题

session存储和同步

由于默认tomcat使用内存管理session,在集群环境下,上述的做法将会存在不一致问题。比如用户从A服务器获取了表单和token,但是提交表单时候却往B服务器提交,这样B服务器判断用户为csrf攻击,所以,用session管理涉及道同步问题。当然,另一个做法是把cookie当session用,把csrf的token放在用户的cookie中。但是,为了避免泄漏token,需要对token进行加密,和进行http only的设置,后者避免js对cookie中的token进行访问。

csrf token泄漏与xss的关系

http://blog.mayflower.de/150-Buy-one-XSS,-get-a-CSRF-for-free.html

和xsrf的关系

http://snoopyxdy.blog.163.com/blog/static/60117440201281294147873/

转载于:https://www.cnblogs.com/jiangu66/p/3241093.html

spring mvc中实现csrf安全防御简记相关推荐

  1. 彻底解决Spring mvc中时间的转换和序列化等问题

    彻底解决Spring mvc中时间的转换和序列化等问题 参考文章: (1)彻底解决Spring mvc中时间的转换和序列化等问题 (2)https://www.cnblogs.com/childkin ...

  2. spring mvc中的@propertysource

    在spring mvc中,在配置文件中的东西,可以在java代码中通过注解进行读取了: @PropertySource  在spring 3.1中开始引入 比如有配置文件 config.propert ...

  3. spring_在Spring MVC中使用多个属性文件

    spring 每个人都听说过将单个Web应用程序组合成一个大型Web应用程序的门户. 门户软件的工作原理类似于mashup -来自多个来源的内容是在单个服务中获取的,大部分都显示在单个网页中. 门户软 ...

  4. Spring MVC中处理Request和Response的策略

    前沿技术早知道,弯道超车有希望 积累超车资本,从关注DD开始 作者:码农小胖哥, 图文编辑:xj 来源:https://mp.weixin.qq.com/s/3eFygsiVl8dC2nRy8_8n5 ...

  5. Spring MVC 中的 forward 和 redirect

    Spring MVC 中,我们在返回逻辑视图时,框架会通过 viewResolver 来解析得到具体的 View,然后向浏览器渲染.假设逻辑视图名为 hello,通过配置,我们配置某个 ViewRes ...

  6. Spring MVC中获取当前项目的路径

    Spring MVC中获取当前项目的路径 在web.xml中加入以下内容 <!--获取项目路径--><context-param><param-name>webAp ...

  7. Spring 2.5:Spring MVC中的新特性

    转载说明:infoQ就是牛人多,看人家去年就把Spring2.5注视驱动的MVC写出来了,还是这么详细,我真是自叹不如,今天偶尔看到这篇文章非常认真的拜读了2遍,简直是茅厕顿开啊....\(^o^)/ ...

  8. Spring MVC中的二三事

    HandlerMapping和HandlerAdapter 这个两个组件应该算是spring mvc中最重要的几个组件之一了,当一个请求到达DispatcherSerlvet后,spring mvc就 ...

  9. 在Spring MVC中使用Apache Shiro安全框架

    我们在这里将对一个集成了Spring MVC+Hibernate+Apache Shiro的项目进行了一个简单说明.这个项目将展示如何在Spring MVC 中使用Apache Shiro来构建我们的 ...

最新文章

  1. Linux的常用的命令
  2. Android --- Dialog 中 Dismiss 和 Cancel 的解释
  3. python画圆形螺旋线_宝宝爱看小猪佩奇,很简单,让我们用python搞定它
  4. 大地图开发管理:《巫师3》Umbra遮挡剔除技术
  5. web前端【第十一篇】jQuery属性相关操作
  6. android socket 闪退,android客户端闪退
  7. mysql主从备份及原理分析
  8. 用 SOLID 原则保驾 React 组件开发
  9. 《电磁学》学习笔记4——磁场高斯定理、安培环路定理、电动势
  10. 简单的收支记账软件的实现详细解释(不连接数据库)
  11. 趣拼图——项目演示及代码
  12. 固态服务器维护,固态硬盘保养和维护
  13. 如何让小红书笔记下沉
  14. 小米,苹果,百度,三星等公司的智能语音识别功能如何测试?
  15. Flutter中使用device_info获取设备信息
  16. 工厂生产线设备数据采集方法
  17. 【小样本分割】PFENet
  18. Java JVM内存模型(运行时数据区域)详解
  19. 安徽大学正方教务系统 用JS 一键完成 教师评价
  20. 朋友问我移居香港后悔没?这回答够真实!

热门文章

  1. Android游戏: 华容道
  2. 用iOS模拟器安装App
  3. 机械手臂类机器人应用存在的问题
  4. 正身以俟时,守己而律物
  5. Python 智能聊天机器人的实现
  6. 【D3D11游戏编程】学习笔记十一:基本几何体绘制
  7. sprite实现影子
  8. 从CSDN的高校俱乐部看过去
  9. Python语言学习笔记-001-Python 3.3.0的配置与Hello World
  10. 使用python和PyQt5编写爬取百度图片的界面工具