银行项目开发过程中,基本都会采用 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
{
        
    }
}

java网页程序采用 spring 防止 csrf 攻击 转的更多相关文章

  1. java使用jsp servlet来防止csrf 攻击的实现方法

    背景: 1.csrf知识 CSRF(Cross-site request forgery跨站请求伪造,也被称为“one click attack”或者session riding,通常缩写为CSRF或 ...

  2. (转)java使用jsp servlet来防止csrf 攻击的实现方法

    背景: 1.csrf知识 CSRF(Cross-site request forgery跨站请求伪造,也被称为“one click attack”或者session riding,通常缩写为CSRF或 ...

  3. CSRF攻击【转载】

     CSRF(cross-site request forgery )跨站请求伪造,攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,通 ...

  4. Java 安全之:csrf攻击总结

    最近在维护一些老项目,调试时发现请求屡屡被拒绝,仔细看了一下项目的源码,发现有csrf token校验,借这个机会把csrf攻击学习了一下,总结成文.本文主要总结什么是csrf攻击以及有哪些方法来防范 ...

  5. 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案

    方案特点: 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案,简化软件开发流程,减少各应用系统相同模块的重复开发工作,提高系统稳定性和可靠性. 基于HTTP协议的开发接口 使用特点在网页 ...

  6. Spring MVC + Spring + Mybitis开发Java Web程序基础

    Spring MVC + Spring + Mybitis是除了SSH外的另外一种常见的web框架组合. Java web开发和普通的Java应用程序开发是不太一样的,下面是一个Java web开发在 ...

  7. 用Spring构建企业Java应用程序的方法

    https://mp.weixin.qq.com/s?__biz=MzU0MDEwMjgwNA==&mid=2247484965&idx=1&sn=ca6b847c65e506 ...

  8. Spring mvc拦截器防御CSRF攻击

    CSRF(具体参考百度百科) CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSR ...

  9. Spring MVC中防止csrf攻击

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

随机推荐

  1. qt QTreeWidget使用

    itemwidget.h #ifndef ITEMWIDGET_H #define ITEMWIDGET_H #include <QtWidgets/QWidget> #include & ...

  2. [travis-ci]自动集成测试

    自动运行测试的平台https://travis-ci.org/ 可以自动导入测试github上的项目 因为yml文件格式错误会导致找不到配置文件, 这里要注意啦, 掉坑里了.... https://d ...

  3. Python学习框架(持续更新)

    1.数据类型 整型:整数,1.2.3...这种 浮点型:简单理解就是小数,1.23.3.141572653等等 字符型:“这是字符”,简单说就是我们说的话,都可以作为字符 布尔值:只有2种,true. ...

  4. C++ 日期 & 时间(转)

    C++ 标准库没有提供所谓的日期类型.C++ 继承了 C 语言用于日期和时间操作的结构和函数. 为了使用日期和时间相关的函数和结构,需要在 C++ 程序中引用 头文件.有四个与时间相关的类型:cloc ...

  5. 当前行的td值传入模态框

    <!-- 让include引用的页面,因为故障列表和周.月故障列表里面的table和分页是一样的前端页面,只有一点不同,没必要每个页面都写这些 --> <table id=" ...

  6. 论文翻译:Speech Enhancement Based on the General Transfer Function GSC and Postfiltering

    论文地址:基于通用传递函数GSC和后置滤波的语音增强 博客作者:凌逆战 博客地址:https://www.cnblogs.com/LXP-Never/p/12232341.html 摘要 在语音增强应 ...

  7. CentOS与Ubuntu的区别

    学习博客:https://www.cnblogs.com/lirongzheng/p/8250511.html 更多Ubuntu相关信息见Ubuntu 专题页面 http://www.linuxidc ...

  8. docker容器互联,实现目录、服务共享

    一.需求 docker使服务之间实现容器隔离,比如Javaweb项目前端.后端.数据库.数据库后台,分别把它们部署在不同的容器里面,实现隔离.但服务和服务之间也有互访的需求,这就涉及到容器网络和容器互 ...

  9. ID生成器之——别人家的方案and自家的方案

    “叮咚,叮咚……”,微信提示音一声接一声,声音是那么的频繁,有妖气,待俺去看一看. 这天刚吃完午饭,打开微信,发现我们的技术讨论组里有 100 多条未读消息,心想,是不是系统出问题了?怎么消息那么频繁 ...

  10. Sublime text3的安装以及python开发环境的搭建

    作者:struct_mooc 博客地址:https://www.cnblogs.com/structmooc/p/12376601.html 一. Sublime text3的安装 1.sublime ...