`
qieyi28
  • 浏览: 157102 次
  • 性别: 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防sql注入攻击过滤器

    本篇文章将深入探讨如何在Java中实现一个防SQL注入的过滤器,以及它的重要性。 SQL注入的原理是利用应用程序处理用户输入数据时的不足,将恶意SQL语句嵌入到原本合法的查询中。例如,如果一个登录接口的用户名字段...

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

    本文将详细介绍如何使用Java Filter实现防止SQL注入的功能。 首先,我们需要创建一个实现了`javax.servlet.Filter`接口的类,例如名为`XSSFilter`。这个类将负责拦截请求并处理可能存在的SQL注入风险。下面是一个...

    SQL注入过滤 (Java版)

    为了解决这个问题,我们可以创建一个名为`SqlInjectionFilter`的Java过滤器,该过滤器将在HTTP请求到达实际处理请求的Servlet之前运行。过滤器的主要任务是检查请求参数,确保它们不包含任何可能导致SQL注入的恶意...

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

    本项目"java web Xss及sql注入过滤器.zip"就是针对这两种威胁提供的一种解决方案,基于流行的Spring Boot 2.0框架进行开发。 XSS 攻击是通过在网页中插入恶意脚本,当其他用户访问该页面时,这些脚本会被执行,从而...

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

    为了解决这一问题,我们可以利用Java的Filter机制来创建一个防止SQL注入的URL过滤器。下面将详细介绍这个过滤器的工作原理、配置方法以及如何有效地防止SQL注入。 首先,我们需要理解SQL注入的基本概念。SQL注入是...

    防止sql注入过滤器配置

    ### 防止SQL注入过滤器配置详解 #### 一、引言 在现代Web应用开发中,安全性一直是至关重要的方面。SQL注入攻击是黑客常用的一种手段,它通过恶意SQL语句来破坏或操纵数据库中的数据。为了保护系统免受此类攻击,...

    预防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; ...

    防止sql注入demo

    下面我们将深入探讨SQL注入的基本原理、为何需要防止以及如何在Java中实现过滤器(Filter)来防止此类攻击。 1. SQL注入基础: SQL注入是由于应用程序未能正确验证和清理用户输入的数据导致的。当用户提交的输入被...

    filter过滤器防止恶意注入

    在Java Web开发中,`Filter`过滤器是一个关键的安全组件,用于拦截...总的来说,`URLfilter`展示了如何使用Java过滤器来防止SQL注入攻击的一个基本思路,但在实际应用中,需要结合更全面的安全策略来提高系统的安全性。

    防止sql注入的java代码

    本文将详细分析一个用于防止SQL注入的Java过滤器类——`Checksql`。 #### 类结构与功能 `Checksql`类实现了`javax.servlet.Filter`接口,主要负责对HTTP请求中的参数进行检查,以确保其不包含可能导致SQL注入攻击...

    java过滤器,防止XSS、SQL

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

    Java过滤器,字符过滤,标签过滤

    这在处理用户输入或者显示网页内容时特别有用,可以防止SQL注入、XSS攻击等安全问题,同时确保数据在不同系统间正确传输。 首先,让我们了解一下Java过滤器的基础知识。在Java Servlet规范中,Filter接口定义了过滤...

    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 ...

    防止SQL注入和XSS攻击Filter

    ### 防止SQL注入和XSS攻击Filter详解 #### 一、背景介绍 在现代Web应用开发过程中,确保应用程序安全至关重要。其中两大常见的安全威胁是SQL注入与跨站脚本(Cross Site Scripting,简称XSS)攻击。这两种攻击方式...

    sql注入与防止

    下面是一个简单的Java Filter示例,展示了如何通过过滤器来防止SQL注入攻击: ```java public class SQLFilter implements Filter { private String inj_str = "'|and|exec|insert|select|delete|update|count|*|%...

    Java中配置过滤器

    2. **安全性增强**:可以添加过滤器来检查请求数据的有效性,防止SQL注入等攻击。 3. **性能优化**:通过缓存机制减少对后端服务的访问次数。 4. **日志记录**:记录请求和响应的信息,便于后期分析和调试。 总结来...

    JAVA Web中过滤器

    - **安全过滤**:过滤非法字符,防止SQL注入或XSS攻击。 - **日志记录**:记录请求和响应的信息,便于分析和调试。 - **性能监控**:统计请求处理时间,监控系统性能。 7. **使用注解配置过滤器** 从Java ...

    spring-boot 过滤器 filter

    在Spring Boot应用中,过滤器(Filter)是用于处理HTTP请求和响应的重要组件。它们允许我们在请求被实际处理之前或之后进行拦截,从而实现诸如日志记录、安全控制、字符编码转换等多种功能。本篇文章将深入探讨...

    java 请求参数过滤拦截

    这里的“java请求参数过滤拦截”主要是指在接口接收到用户输入的数据时,通过过滤器(Filter)对参数进行检查,防止恶意攻击者利用特殊字符执行SQL注入、跨站脚本攻击(XSS)等危害。下面我们将详细探讨这一主题。 ...

    java非法字符过滤器

    尽管此过滤器能防止大部分非法字符的注入,但对于高级的攻击手段(如SQL注入、XSS攻击等),还需结合其他安全措施共同应对。 #### 结论 Java非法字符过滤器是一个实用的工具,它不仅有助于提升应用程序的安全性,...

Global site tag (gtag.js) - Google Analytics