作者:mobiledu2502934511 | 来源:互联网 | 2023-09-07 21:20
目录csrf是什么一般防御做法如何在springmvc中实现扩展问题1csrf是什么csrf全称是Cross-siterequestforgery,http:enwikipedia
目录
csrf是什么
一般防御做法
如何在spring mvc中实现
扩展问题
1.csrf是什么
csrf全称是 Cross-site request forgery, http://en.wikipedia.org/wiki/Csrf
危害:使受害用户在不经意间执行了不是用户意愿的请求。最终导致泄密和执行了其他高危害操作。
2.一般防御做法
防御基本原理 :本质上是做好用户数据提交的完整性,保证用户提交的内容是用户发起的非篡改过的请求。
通常做法是,在用户在访问页面的时候,通过隐藏于渲染一个token,这个token由服务器在后端渲染。用户在执行变更的提交时,把token作为参数带上。服务器在后端校验token是否合法,是否被使用过。
这样,就保障了用户提交过来的请求是用户本人发起的请求。但这个前提是,当前有效的token没有被泄漏。
具体防范事例可见: http://www.2cto.com/Article/201310/247849.html
csrf token的生成 :
1. 对于需要防止重复提交的场景,token必须只能唯一生成一个并且只能使用一次。可以用uuid或者其他唯一生成的方式。
2. 对于需要在用户会话期间使用的场景,可以基于用户的sessionid+时间加密生成。
csrf token的储存 :一般在session中,或者COOKIE中。
3.如何在spring mvc中实现
如何与spring结合 :利用spring的HandlerInterceptorAdapter进行请求的csrf的校验,利用ReuqestDataValueProcessor来进行隐藏input的csrf token渲染。
可参考 http://www.2cto.com/Article/201310/247850.html
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://www.2cto.com/Article/201310/247851. html
和xsrf的关系
http://www.2cto.com/Article/201209/156405.html