经常开发银行的应用,在安全性方面要求比较高,在安全性保护方面,csrf 攻击是必须测试的项目之一,关于什么是 csrf 攻击,我不想多做解释,网上已经介绍够多了,可以参看 IBM Developer works 的文章 http://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/ 这篇文章介绍了 csrf 的危害和一般解决办法,在实际开发过程中,有一些参考价值。
但事实上在我经历过的银行项目开发过程中,基本都会采用 spring 框架,所以完全可以不用自己开发 filter 去拦截 csrf 攻击的请求,而直接采用实现 spring 提供的 HandlerInterceptor 来实现。 从本质上来说,这也是一个 filter. 我这里就直接实现它来 防止 csrf 攻击.
基本思路:
1. 用户登录之后,后台程序生产一个 csrftoken 的 token ,放在 cookies 中,并且记录在 session 中。
2. 当客户端发出请求的访问后台程序的时候,经过自己实现的HandlerInterceptor 来拦截.
3. 拦截的基本方法是检查请求的参数中是否有csrftoken ,并检查这个值,是否合法有效(不为空,并且得到的参数等于cookies 中保存的值,而且还要等于session 中的值,那么就是合法的)
直接上代码,需要相关 spring 的jar 包,自己可以准备好,代码如下:package com.yihaomen.intercepter;
import javax.servlet.http.Cookie;
import javax.