spring mvc中实现csrf安全防御简记
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安全防御简记相关推荐
- 彻底解决Spring mvc中时间的转换和序列化等问题
彻底解决Spring mvc中时间的转换和序列化等问题 参考文章: (1)彻底解决Spring mvc中时间的转换和序列化等问题 (2)https://www.cnblogs.com/childkin ...
- spring mvc中的@propertysource
在spring mvc中,在配置文件中的东西,可以在java代码中通过注解进行读取了: @PropertySource 在spring 3.1中开始引入 比如有配置文件 config.propert ...
- spring_在Spring MVC中使用多个属性文件
spring 每个人都听说过将单个Web应用程序组合成一个大型Web应用程序的门户. 门户软件的工作原理类似于mashup -来自多个来源的内容是在单个服务中获取的,大部分都显示在单个网页中. 门户软 ...
- Spring MVC中处理Request和Response的策略
前沿技术早知道,弯道超车有希望 积累超车资本,从关注DD开始 作者:码农小胖哥, 图文编辑:xj 来源:https://mp.weixin.qq.com/s/3eFygsiVl8dC2nRy8_8n5 ...
- Spring MVC 中的 forward 和 redirect
Spring MVC 中,我们在返回逻辑视图时,框架会通过 viewResolver 来解析得到具体的 View,然后向浏览器渲染.假设逻辑视图名为 hello,通过配置,我们配置某个 ViewRes ...
- Spring MVC中获取当前项目的路径
Spring MVC中获取当前项目的路径 在web.xml中加入以下内容 <!--获取项目路径--><context-param><param-name>webAp ...
- Spring 2.5:Spring MVC中的新特性
转载说明:infoQ就是牛人多,看人家去年就把Spring2.5注视驱动的MVC写出来了,还是这么详细,我真是自叹不如,今天偶尔看到这篇文章非常认真的拜读了2遍,简直是茅厕顿开啊....\(^o^)/ ...
- Spring MVC中的二三事
HandlerMapping和HandlerAdapter 这个两个组件应该算是spring mvc中最重要的几个组件之一了,当一个请求到达DispatcherSerlvet后,spring mvc就 ...
- 在Spring MVC中使用Apache Shiro安全框架
我们在这里将对一个集成了Spring MVC+Hibernate+Apache Shiro的项目进行了一个简单说明.这个项目将展示如何在Spring MVC 中使用Apache Shiro来构建我们的 ...
最新文章
- Linux的常用的命令
- Android --- Dialog 中 Dismiss 和 Cancel 的解释
- python画圆形螺旋线_宝宝爱看小猪佩奇,很简单,让我们用python搞定它
- 大地图开发管理:《巫师3》Umbra遮挡剔除技术
- web前端【第十一篇】jQuery属性相关操作
- android socket 闪退,android客户端闪退
- mysql主从备份及原理分析
- 用 SOLID 原则保驾 React 组件开发
- 《电磁学》学习笔记4——磁场高斯定理、安培环路定理、电动势
- 简单的收支记账软件的实现详细解释(不连接数据库)
- 趣拼图——项目演示及代码
- 固态服务器维护,固态硬盘保养和维护
- 如何让小红书笔记下沉
- 小米,苹果,百度,三星等公司的智能语音识别功能如何测试?
- Flutter中使用device_info获取设备信息
- 工厂生产线设备数据采集方法
- 【小样本分割】PFENet
- Java JVM内存模型(运行时数据区域)详解
- 安徽大学正方教务系统 用JS 一键完成 教师评价
- 朋友问我移居香港后悔没?这回答够真实!