`
qieyi28
  • 浏览: 152555 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java 过滤器filter防sql注入

阅读更多

XSSFilter.java

 

public void doFilter(ServletRequest servletrequest,  
            ServletResponse servletresponse, FilterChain filterchain)  
            throws IOException, ServletException {  
          
  
        //flag = true 只做URL验证; flag = false 做所有字段的验证;  
        boolean flag = true;  
        if(flag){  
            //只对URL做xss校验  
            HttpServletRequest httpServletRequest = (HttpServletRequest) servletrequest;  
            HttpServletResponse httpServletResponse = (HttpServletResponse) servletresponse;  
              
            String requesturi = httpServletRequest.getRequestURL().toString();  
            requesturi = URLDecoder.decode(requesturi, "UTF-8");  
            if(requesturi!=null&&requesturi.indexOf("alipay_hotel_book_return.html")!=-1){  
                filterchain.doFilter(servletrequest, servletresponse);  
                return;  
            }  
            if(requesturi!=null&&requesturi.indexOf("account_bank_return.html")!=-1){  
                filterchain.doFilter(servletrequest, servletresponse);  
                return;  
            }  
            if(requesturi!=null&&requesturi.indexOf("/alipay/activity.html")!=-1){  
                filterchain.doFilter(servletrequest, servletresponse);  
                return ;  
            }  
            if(requesturi!=null&&requesturi.indexOf("/alipayLogin.html")!=-1){  
                filterchain.doFilter(servletrequest, servletresponse);  
                return ;  
            }  
            RequestWrapper rw = new RequestWrapper(httpServletRequest);  
            String param =  httpServletRequest.getQueryString();  
            if(!"".equals(param) && param != null) {  
                param = URLDecoder.decode(param, "UTF-8");  
                String originalurl = requesturi + param;  
                  
                String sqlParam = param;  
                //添加sql注入的判断  
                if(requesturi.endsWith("/askQuestion.html") || requesturi.endsWith("/member/answer.html")){  
                    sqlParam = rw.cleanSQLInject(param);  
                }  
                  
                String xssParam = rw.cleanXSS(sqlParam);  
                requesturi += "?"+xssParam;  
                  
                  
                if(!xssParam.equals(param)){  
                    System.out.println("requesturi::::::"+requesturi);  
                    httpServletResponse.sendRedirect(requesturi);  
                    System.out.println("no entered.");  
//                  filterchain.doFilter(new RequestWrapper((HttpServletRequest) servletrequest), servletresponse);  
                    return ;  
                }  
            }  
            filterchain.doFilter(servletrequest, servletresponse);  
        }else{  
              
            //对请求中的所有东西都做校验,包括表单。此功能校验比较严格容易屏蔽表单正常输入,使用此功能请注意。  
            filterchain.doFilter(new RequestWrapper((HttpServletRequest) servletrequest), servletresponse);  
        }  
    }

 requestMapping

 

public RequestWrapper(){  
        super(null);  
    }  
  
    public RequestWrapper(HttpServletRequest httpservletrequest) {  
        super(httpservletrequest);  
    }  
  
    public String[] getParameterValues(String s) {  
        String str[] = super.getParameterValues(s);  
        if (str == null) {  
            return null;  
        }  
        int i = str.length;  
        String as1[] = new String[i];  
        for (int j = 0; j < i; j++) {  
            as1[j] = cleanXSS(cleanSQLInject(str[j]));  
        }  
  
        return as1;  
    }  
  
    public String getParameter(String s) {  
        String s1 = super.getParameter(s);  
        if (s1 == null) {  
            return null;  
        } else {  
            return cleanXSS(cleanSQLInject(s1));  
        }  
    }  
  
    public String getHeader(String s) {  
        String s1 = super.getHeader(s);  
        if (s1 == null) {  
            return null;  
        } else {  
            return cleanXSS(cleanSQLInject(s1));  
        }  
    }  
  
    public String cleanXSS(String src) {  
        String temp =src;  
  
        System.out.println("xss---temp-->"+src);  
        src = src.replaceAll("<", "<").replaceAll(">", ">");  
       // if (src.indexOf("address")==-1)  
    //  {  
          src = src.replaceAll("\\(", "(").replaceAll("\\)", ")");  
        //}  
       
        src = src.replaceAll("'", "'");  
          
        Pattern pattern=Pattern.compile("(eval\\((.*)\\)|script)",Pattern.CASE_INSENSITIVE);     
        Matcher matcher=pattern.matcher(src);     
        src = matcher.replaceAll("");  
  
        pattern=Pattern.compile("[\\\"\\'][\\s]*javascript:(.*)[\\\"\\']",Pattern.CASE_INSENSITIVE);   
        matcher=pattern.matcher(src);  
        src = matcher.replaceAll("\"\"");  
          
        //增加脚本   
        src = src.replaceAll("script", "").replaceAll(";", "")  
            .replaceAll("\"", "").replaceAll("@", "")  
            .replaceAll("0x0d", "")  
            .replaceAll("0x0a", "").replaceAll(",", "");  
  
        if(!temp.equals(src)){  
            System.out.println("输入信息存在xss攻击!");  
            System.out.println("原始输入信息-->"+temp);  
            System.out.println("处理后信息-->"+src);  
        }  
        return src;  
    }  
      
    //需要增加通配,过滤大小写组合  
    public String cleanSQLInject(String src) {  
        String temp =src;  
        src = src.replaceAll("insert", "forbidI")  
            .replaceAll("select", "forbidS")  
            .replaceAll("update", "forbidU")  
            .replaceAll("delete", "forbidD")  
            .replaceAll("and", "forbidA")  
            .replaceAll("or", "forbidO");  
          
        if(!temp.equals(src)){  
            System.out.println("输入信息存在SQL攻击!");  
            System.out.println("原始输入信息-->"+temp);  
            System.out.println("处理后信息-->"+src);  
        }  
        return src;  
    }

 xml配置:

<filter>  
        <filter-name>XssFilter</filter-name>  
        <filter-class>cn.com.jsoft.xss.XSSFilter</filter-class>  
        <init-param>  
            <param-name>encoding</param-name>  
            <param-value>UTF-8</param-value>  
        </init-param>  
    </filter>  
    <filter-mapping>  
        <filter-name>XssFilter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  

 以上代码仅仅将特殊的sql字符,特殊script脚本字符处理掉,具体的页面处理还需要后台处理!!

 

源码下载地址:http://download.csdn.net/detail/xb12369/7145235

以上内容为我转载,正确与否,有待确认。

转载地址http://blog.csdn.net/xb12369/article/details/22921629

分享到:
评论

相关推荐

    java 过滤器filter防sql注入的实现代码

    下面小编就为大家带来一篇java 过滤器filter防sql注入的实现代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    java防sql注入攻击过滤器

    java防sql注入攻击过滤器 filter

    SQL注入过滤 (Java版)

    SQL 安全注入漏洞过滤器类 Java实现 Java类实现,以及配置文件web.xml

    java web Xss及sql注入过滤器.zip

    java web 过滤器防止Xss、sql注入,基于spring boot 2.0框架开发。

    防止sql注入的url过滤器【java filter】

    防止sql注入的url过滤器,简单配置即可!

    预防XSS攻击和SQL注入XssFilter

    三、过滤器配置 web.xml配置 &lt;filter&gt; &lt;filter-name&gt;XssFilter&lt;/filter-name&gt; &lt;filter-class&gt;com.xxx.Filter.XssFilter&lt;/filter-class&gt; &lt;/filter&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;XssFilter&lt;/filter-name&gt; ...

    java过滤器,防止XSS、SQL

    java过滤器,XSS : 跨站脚本攻击(Cross Site Scripting),SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令

    java sql注入l

    -- 防止SQL注入的过滤器 --&gt; 72 &lt;filter&gt; 73 &lt;filter-name&gt;antiSqlInjection&lt;/filter-name&gt; 74 &lt;filter-class&gt;com.tarena.dingdang.filter.AntiSqlInjectionfilter&lt;/filter-class&gt; 75 &lt;/filter&gt; 76 ...

    SpringBoot +esapi 实现防止xss攻击 实战代码

    SpringBoot +esapi springSecurity 过滤器链集成 实现防止xss攻击 实战代码

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    8.8.1 Struts Prepare And Execute Filter过滤器 8.8.2 struts.xml文件配置出错 8.9 精彩回顾 第9章 庖丁解牛 ——揭密Struts2高级技术 9.1 本章学习任务 9.1.1 本章知识体系 9.1.2 实例开发任务 9.2 OGNL表达式...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    20.5 对用户进行统一验证的过滤器 594 20.6 对请求和响应数据进行替换的 20.6 过滤器 600 20.7 小结 609 第21章 中文乱码问题与国际化 610 21.1 中文乱码问题产生的由来 610 21.1.1 常用字符集 610 21.1.2 对...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    20.5 对用户进行统一验证的过滤器 594 20.6 对请求和响应数据进行替换的 20.6 过滤器 600 20.7 小结 609 第21章 中文乱码问题与国际化 610 21.1 中文乱码问题产生的由来 610 21.1.1 常用字符集 610 21.1.2 对...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    20.5 对用户进行统一验证的过滤器 594 20.6 对请求和响应数据进行替换的 20.6 过滤器 600 20.7 小结 609 第21章 中文乱码问题与国际化 610 21.1 中文乱码问题产生的由来 610 21.1.1 常用字符集 610 21.1.2 对...

    Java Web程序设计教程

    9.4.2filter过滤 201 9.5项目实战——客户订单管理 202 本章小结 207 课后练习 207 第10章hibernate性能优化 208 10.1hibernate事务与并发 208 10.1.1什么是事务 208 10.1.2hibernate中的事务处理 209 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    20.5 对用户进行统一验证的过滤器 594 20.6 对请求和响应数据进行替换的 20.6 过滤器 600 20.7 小结 609 第21章 中文乱码问题与国际化 610 21.1 中文乱码问题产生的由来 610 21.1.1 常用字符集 610 21.1.2 对...

    springmvc+hibernate 日志管理工具

    功能日志:基于java aop思想设计,通过Spring advisorAutoProxy(自动代理)实现controller过滤代理拦截,并提供拦截filter过滤,支持spring EL表达式。 数据日志:设计中提供数据日志注入接口,管理数据日志注入,...

    企业员工角色权限管理平台(SpringBoot2.0+Mybatis+Shiro+Vue)

    本课程在技术栈层面涵盖了前端和后端的大部分常用技术,包括Spring Boot、Spring MVC、Mybatis、Mybatis-Plus、Shiro(身份认证与资源授权跟会话等等)、Spring AOP、防止XSS攻击、防止SQL注入攻击、过滤器Filter、...

    基于JavaWeb的期刊管理系统+课设报告.zip

    20. 新增动态首页跳转功能(filter过滤器实现)以及单独点击期刊详情页面 21. 匹配后端随机生成图片信息,以及期刊封面文件的上传 22. 设置UUID信息生成唯一图片识别码 23. 修改管理员搜索结果页以及图片上传返回...

    2017最新大数据架构师精英课程

    38_java JDBC-sql注入问题-preparedstatemnt 39_java 事务管理-批量插入0 X, w! w5 [- E( `( f* V1 [ 40_java事务管理-批量插入-存储过程 41_java mysql 函数 42_java mysql LongBlob + Text类型8 @9 ^) y7 s* L, _3...

    ssh(structs,spring,hibernate)框架中的上传下载

    首先数据表中的Blob字段在Java领域对象中声明为byte[]类型,而非java.sql.Blob类型。  2.数据表Blob字段在Hibernate持久化映射文件中的type为org.springframework.orm.hibernate3.support.BlobByteArrayType,即...

Global site tag (gtag.js) - Google Analytics