csrf攻击 java_java网页程序采用 spring 防止 csrf 攻击 转

银行项目开发过程中,基本都会采用 spring 框架,所以完全可以不用自己开发 filter 去拦截 csrf 攻击的请求,而直接采用实现 spring 提供的 HandlerInterceptor 来实现。 从本质上来说,这也是一个 filter.  我这里就直接实现它来 防止 csrf 攻击.

基本思路:

1. 用户登录之后,后台程序生产一个 csrftoken 的 token ,放在 cookies 中,并且记录在 session

中。

2. 当客户端发出请求的访问后台程序的时候,经过自己实现的HandlerInterceptor 来拦截.

3.

拦截的基本方法是检查请求的参数中是否有csrftoken ,并检查这个值,是否合法有效(不为空,并且得到的参数等于cookies

中保存的值,而且还要等于session 中的值,那么就是合法的)

package com.yihaomen.intercepter;

import

javax.servlet.http.Cookie;

import

javax.servlet.http.HttpServletRequest;

import

javax.servlet.http.HttpServletResponse;

import

org.springframework.web.servlet.HandlerInterceptor;

import

org.springframework.web.servlet.ModelAndView;

public class

CsrfIntercepter implements HandlerInterceptor {

public  static final

String CSRFNUMBER = "csrftoken";

public boolean

preHandle(HttpServletRequest request,HttpServletResponse response, Object

handler) throws Exception {

String keyFromRequestParam =

(String) request.getParameter(CSRFNUMBER);

String keyFromCookies="";

boolean result=false;

Cookie[] cookies =

request.getCookies();

if(cookies!=null){

for (int i =

0; i < cookies.length; i++) {

String name =

cookies[i].getName();

if(CSRFNUMBER.equals(name) )

{

keyFromCookies=

cookies[i].getValue();

}

}

}

if((keyFromRequestParam!=null

&& keyFromRequestParam.length()>0 &&

keyFromRequestParam.equals(keyFromCookies)

&&

keyFromRequestParam.equals((String)request.getSession().getAttribute(CSRFNUMBER))))

{

result=true;

}else{

request.getRequestDispatcher("/error/400").forward(request,

response);

}

return

result;

}

public void afterCompletion(HttpServletRequest

arg0, HttpServletResponse arg1,

Object arg2, Exception arg3)

throws Exception {

}

public void

postHandle(HttpServletRequest arg0, HttpServletResponse

arg1,

Object arg2, ModelAndView arg3) throws Exception

{

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值