基于jfinal的XssHandler,统一处理xss脚本攻击

 前天公司的网站在《360安全检测》上发现了大量xss漏洞。好吧,我立马懂了,除了我做得有几个模块过滤了之外,别的几乎100%存在!

10111709_uWsW.gif

    对于这个东西怎么解决呢?狠是纠结了一番,一个个去改controller吗?好吧这不是我的风格,我没这么勤快!使用拦截器么?(公司使用的是Spring MVC)貌似也解决不了问题?最后使用Filter将问题统一处理OK,其原理是重写掉Request中的getParameter、getParameterValues和getParameterMap方法,使用jsoup清理掉消除不受信任的HTML

    废话不多说,贴代码!下面是我在JFinal中使用handler的实现!

//XssHandler.java
 
/**
 * 统一XSS处理
 * @author L.cm
 * email: 596392912@qq.com
 * site:  http://www.dreamlu.net
 * @date 2014-5-5 上午9:11:10
 */
public class XssHandler extends Handler {
     
    // 排除的url,使用的target.startsWith匹配的
    private String exclude;
     
    public XssHandler(String exclude) {
        this.exclude = exclude;
    }
 
    @Override
    public void handle(String target, HttpServletRequest request,
            HttpServletResponse response, boolean[] isHandled) {
        // 对于非静态文件,和非指定排除的url实现过滤
        if (target.indexOf(".") == -1 && !target.startsWith(exclude)){
            request = new HttpServletRequestWrapper(request);
        }
        nextHandler.handle(target, request, response, isHandled);
    }
}

在jfinal中我添加了一个exclude参数来排除后台Admin中的参数的清理工作!

//HttpServletRequestWrapper.java
 
/**
 * 对HttpServletRequestWrapper重写,为了统一XSS处理加上懒写成这样了
 * @author L.cm
 * email: 596392912@qq.com
 * site:  http://www.dreamlu.net
 * @date 2014-5-5 上午9:10:18
 */
public class HttpServletRequestWrapper extends javax.servlet.http.HttpServletRequestWrapper{
 
    public HttpServletRequestWrapper(HttpServletRequest request) {
        super(request);
    }
 
    /**
     * 重写并过滤getParameter方法
     */
    @Override
    public String getParameter(String name) {
        return HtmlFilter.getBasicHtmlandimage(super.getParameter(name));
    }
     
    /**
     * 重写并过滤getParameterValues方法
     */
    @Override
    public String[] getParameterValues(String name) {
        String[] values = super.getParameterValues(name);
        if (null == values){
            return null;
        }
        for (int i = 0; i < values.length; i++) {
            values[i] = HtmlFilter.getBasicHtmlandimage(values[i]);
        }
        return values;
    }
     
    /**
     * 重写并过滤getParameterMap方法
     */
    @Override
    public Map getParameterMap() {
        Map paraMap = super.getParameterMap();
        // 对于paraMap为空的直接return
        if (null == paraMap || paraMap.isEmpty()) {
            return paraMap;
        }
        for (Entry entry : paraMap.entrySet()) {
            String key = entry.getKey();
            String[] values     = entry.getValue();
            if (null == values) {
                continue;
            }
            String[] newValues  = new String[values.length];
            for (int i = 0; i < values.length; i++) {
                newValues[i] = HtmlFilter.getBasicHtmlandimage(values[i]);
            }
            paraMap.put(key, newValues);
        }
        return paraMap;
    }
}

Jsoup中会对HTML的attr同样过滤,因为部分attr也是不安全的!

// HtmlFilter.java
//在basic基础上  增加图片通过
public static String getBasicHtmlandimage(String html) {
    if (html == null)
        return null;
    return Jsoup.clean(html, Whitelist.basicWithImages());
}

OK,到此大功告成!

转载于:https://my.oschina.net/ydsakyclguozi/blog/490077

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程说明    这是一套详细介绍sitesCMS源码的视频课程,共计35节,约577分钟。完整、详细的讲解sitesCMS源码,并借此讲解JFinal进行实战项目开发的实现方案。    视频课程是基于JFinal 4.9.8,sitesCMS 2.0.6的,后续JFinal和sitesCMS都会不断升级,我们将同步更新视频教程,可以放心购买。课程亮点:完整的备课笔记;课程逻辑清晰,由面到点,逐步深入;基于开源框架JFinal和sitesCMS,可以看到全部课程源码;免费更新;课程收获:掌握sitesCMS全部源码知识;掌握sitesCMS灵活使用技巧;掌握sitesCMS二次开发技巧;掌握JFinal开发实战项目的基本逻辑和方法(可以直接复用);了解JFinal项目开发的全程知识;赠送一套价值49.9的网站模板,可直接复用;课程要求:    要求有JFinal基础知识,最好是学习过 JFinal从入门到实战【60集】视频教程 。 课程介绍    整套课程分6个章节进行解释,由面到点逐步深入,网站详细的介绍sitesCMS源码以及JFinal实战项目的开发方案。    第一章是基本介绍,对框架进行全局的、必要的说明,可免费观看。    第二章至第五章都是系统源码介绍,其中第二章是全局文件基本说明,了解有哪些东西,第三章至第五章是具体功能点源码说明。    第六章则是介绍二次开发的,讲解怎样高效便捷的使用sitesCMS进行二次开发。课程目录一、基本介绍101.系统简介:介绍系统的基本情况、功能演示102.运行部署:源码获取、本地部署、打包发布、常见问题103.数据库表说明:数据表关联关系、表结构详细说明104.源码简介:文件结构说明、重点文件说明二、源码详解-全局文件201.启动类和undertow.txt:系统启动和undertow的配置202.配置类:全局配置类CMSConfig.java详解203.配置类-数据库配置:单独介绍数据库配置、SQL监控、model生成204.系统参数类:参数类的意义目的、使用三、源码详解-管理端301.登录与退出302.管理端UI介绍:页面的组织、pjax局部刷新、全局拦截器303.权限管控方案:权限介绍、展现形式、市面上常用的设计方案、sitesCMS选用的方案、方案逻辑304.权限管理源码详解:一键同步权限、权限管理、权限限定305.角色管理源码详解:以此为例,完整讲解数据管理功能306.用户管理源码详解:重点介绍分页查询逻辑及源码307.权限自定义指令和权限限定:详细介绍权限自定义指令和权限限定308.系统设计的基本原则:命名原则、数据校验309.栏目文章设计方案:功能设计逻辑310.栏目管理源码详解:父子栏目数据处理,layui使用介绍311.文章管理源码详解:图文和图集的新增保存312.wangEditor使用详解:基本使用,样式保存等常见问题313.文件上传源码详解:文件上传的基本流程、JFinal上传文件实现、富文本编辑器、Layui上传文件实现314.XSS防御详解:XSS简介、sitesCMS防御方案315.CSRF防御详解:CSRF简介、三种防御策略、sitesCMS防御策略316.访问日志源码详解:设计方案、分类、优化升级317.站点管理源码详解:新增站点、站点管理、系统设置、初始化站点数据318.多站点设计方案:多站点需要解决的两个问题,以及问题答案四、源码详解-用户端401.cds站点详细说明:站点资源包详细说明、页面分类、自带页面跳转方法402.自定义指令:9个数据获取处理指令403.cds页面设计:位置、名称、布局五、源码详解-其他源码501.统一异常处理、IP工具类、缓存配置、浏览器图标、逻辑架构六、二次开发601.文章功能的灵活使用:对文章内容的灵活使用解决新增需求602.增强现有功能:实现文章增加一个标签属性的功能603.开发新的功能:实现文件管理功能604.开发新的站点:实现一个新站点开发,介绍新站点开发流程

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值