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/

spring mvc中实现csrf安全防御简记的更多相关文章

  1. Spring MVC中防止csrf攻击

    Spring MVC中防止csrf攻击的拦截器示例 https://blog.csdn.net/qq_40754259/article/details/80510088 Spring MVC中的CSR ...

  2. Spring mvc中@RequestMapping 6个基本用法

    Spring mvc中@RequestMapping 6个基本用法 spring mvc中的@RequestMapping的用法.  1)最基本的,方法级别上应用,例如: Java代码 @Reques ...

  3. spring mvc中使用freemark的一点心得

    参考文档: FreeMarker标签与使用 连接http://blog.csdn.net/nengyu/article/details/6829244 freemarker学习笔记--指令参考: ht ...

  4. Http请求中Content-Type讲解以及在Spring MVC中的应用

    引言: 在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息,但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值 ...

  5. Spring mvc中@RequestMapping 6个基本用法小结(转载)

    小结下spring mvc中的@RequestMapping的用法. 1)最基本的,方法级别上应用,例如: @RequestMapping(value="/departments" ...

  6. Spring MVC中处理静态资源的多种方法

    处理静态资源,我想这可能是框架搭建完成之后Web开发的”头等大事“了. 因为一个网站的显示肯定会依赖各种资源:脚本.图片等,那么问题来了,如何在页面中请求这些静态资源呢? 还记得Spring MVC中 ...

  7. Spring MVC 中的基于注解的 Controller【转】

    原文地址:http://my.oschina.net/abian/blog/128028 终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 H ...

  8. spring mvc中的文件上传

    使用commons-fileupload上传文件所需要的架包有:commons-fileupload 和common-io两个架包支持,可以到Apache官网下砸. 在配置文件spring-mvc.x ...

  9. spring mvc中的valid

    当你希望在spring mvc中直接校验表单参数时,你可以采用如下操作: 声明Validator的方式: 1.为每一个Controller声明一个Validator @Controller publi ...

随机推荐

  1. windows phone (24) Canvas元素A

    原文:windows phone (24) Canvas元素A Canvas元素表示定制一个区域,并可以通过相对坐标定义子元素位置,在一下情况下Canvas是不可见的 Height 属性等于 0. W ...

  2. C语言 cgi(3)

    1cs3157 – Advanced ProgrammingSummer 2014, Project 1, 150 pointsJune 17, 2014Follow these step-by-st ...

  3. 要引入java吸管工具

    Java调用颜色选择器robot方法getPixelColor让我们来看看下面的方法robot详细的实施类方法中,例如,下面的 getPixelColor public Color getPixelC ...

  4. Android在ExpandableListView控制的基本使用

    在本文中,Demo为了展示Android在ExpandableListView用途管制.如该组/儿子ListView绑定数据源. 直接上代码例如以下: 程序结构图: layout文件夹下的 main. ...

  5. oracle 关于日期格式转换与使用

    在oracle中我们经常会和日期打交道,在做报表的时候经常会用日报,周报,月报之类的条件进行分组: 我写了些例子来启发下大脑 select Sysdate from dual select to_ch ...

  6. uva 11396Claw Decomposotion(二分图判定)

     题目大意:给出一个简单无向图,每一个点的度为3.推断是否能将此图分解成若干爪的形式.使得每条边都仅仅出如今唯一的爪中. (点能够多次出如今爪中) 这道题实质上就是问这个图是否为二分图,dfs判定 ...

  7. 插入排序java

    插入排序简述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的.个数加一的有序数据.   第一个元素是有序队列,从第二个元素开始向有序队列中插入,插入完成后将第三个元素向 ...

  8. MVC @Html控件

    传统的Html元素不能和服务端数据进行绑定 HtmlHelper类提供了一系列的方法来生成Html元素 并可以实现与数据绑定在一起 然后生成Html Html.BeginForm(actionName ...

  9. 高质量c c++编程

    第1章 文件结构 每一个C++/C程序通常分为两个文件.一个文件用于保存程序的声明(declaration),称为头文件.还有一个文件用于保存程序的实现(implementation),称为定义(de ...

  10. 20那天android得知

    20多天的实习(事实上,一个人学习的东西)要结束, 剩下的只是读研. 这项20许多天我学到了很多东西, 对android的发展也有了一定的了解.之后写这篇文章主要完成的研究可以得知快速回升 1.安德鲁 ...