SQL注入过滤器

转载 2018年04月16日 17:33:56

    1、在web.xml中的配置如下:拦截所有请求---项目中使用并通过了安全扫描

<!--  此方法已经通过扫描,可以上线(sql注入)-->
<filter>  
        <filter-name>AntiSqlInjectionfilter</filter-name>  
        <filter-class>com.sunrise.grid.xss.filter.AntiSqlInjectionfilter</filter-class>  
    </filter>  
    <filter-mapping>  
        <filter-name>AntiSqlInjectionfilter</filter-name>  
        <url-pattern>/*</url-pattern>  
        <dispatcher>REQUEST</dispatcher>  

    </filter-mapping>


    2、具体的SQL过滤器实现类:-----------------------------------------------------------


package com.sunrise.grid.xss.filter;


import java.io.IOException;
import java.util.Enumeration;
import java.util.regex.Pattern;


import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class AntiSqlInjectionfilter implements Filter {
    public void destroy() {
        // TODO Auto-generated method stub
    }


    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
    }


    public void doFilter(ServletRequest args0, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) args0;
        HttpServletResponse res = (HttpServletResponse) response;
        // 获得所有请求参数名
        Enumeration params = req.getParameterNames();
        String sql = "";
        while (params.hasMoreElements()) {
            // 得到参数名
            String name = params.nextElement().toString();
            // System.out.println("name===========================" + name +
            // "--");
            // 得到参数对应值
            String[] value = req.getParameterValues(name);
            for (int i = 0; i < value.length; i++) {
                sql = sql + value[i];
                if (!isValid(value[i])) {// 主要针对参数的值作过滤
                    response.setContentType("text/plain; charset=utf-8");
                    response.getWriter().write("参数包含敏感词汇");
                    return;
                }
            }
        }
        chain.doFilter(args0, response);
    }


    /*
     * // 效验 protected static boolean sqlValidate(String str) { str =
     * str.toLowerCase();// 统一转为小写 String badStr =
     * "'|and|exec|execute|insert|select|delete|update|count|drop|*|%|chr|mid|master|truncate|"
     * +
     * "char|declare|sitename|net user|xp_cmdshell|;|or|-|+|,|like'|and|exec|execute|insert|create|drop|"
     * + "table|from|grant|use|group_concat|column_name|" +
     * "information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|*|"
     * + "chr|mid|master|truncate|char|declare|or|;|--|+|,|like|//|/|%|#";//
     * 过滤掉的sql关键字,可以手动添加
     * 
     * String[] badStrs = badStr.split("\\|"); for (int i = 0; i <
     * badStrs.length; i++) { if (str.indexOf(badStrs[i]) >= 0) { return true; }
     * } return false; }
     */


    // ORACLE 注解 -- /**/
    // 关键字过滤 update ,delete


    static String reg = "(?:')|(?:--)|(/\\*(?:.|[\\n\\r])*?\\*/)|"
            + "(\\b(select|update|and|or|delete|insert|trancate|char|into|substr|ascii|declare|exec|count|master|into|drop|execute)\\b)";


    static Pattern sqlPattern = Pattern.compile(reg, Pattern.CASE_INSENSITIVE);


    /***************************************************************************
     * 参数校验
     * 
     * @param str
     */
    public static boolean isValid(String str) {


        if (sqlPattern.matcher(str).find()) {


            // logger.error("未能通过过滤器:p=" + p);


            return false;
        }
        return true;
    }
}

SQL 注入防御在互联网企业中的实践

-
  • 1970年01月01日 08:00

java过滤器防sql注入

  • 2014年04月04日 11:23
  • 3KB
  • 下载

使用过滤器防止简单的页面SQL注入

在之前写的一个群博系统中,在上线一段时间后,被自己人发现了一个天大的漏洞——SQL注入,自己也是第一次遇到,真是难以置信,后来看到这样一篇文章:java类过滤器,防止页面SQL注入。自己修改了一下,可...
  • zhuxinquan61
  • zhuxinquan61
  • 2016-09-07 17:39:11
  • 3743

JSP使用过滤器防止SQL注入

转载自:http://www.cnblogs.com/leftshine/p/5539810.html 什么是SQL注入攻击?引用百度百科的解释: sql注入_百度百科: 所谓S...
  • u012377333
  • u012377333
  • 2016-05-30 09:18:09
  • 1672

java 过滤器filter防sql注入

XSSFilter.java public void doFilter(ServletRequest servletrequest, ServletResponse servletrespon...
  • xb12369
  • xb12369
  • 2014-04-04 11:22:59
  • 12634

JSP过滤器防止SQL注入

SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏 忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。 filter功能.它使用户可以改变一个...
  • Smile_7x
  • Smile_7x
  • 2014-02-13 18:26:02
  • 3268

java类过滤器,防止页面SQL注入

转自:http://www.oschina.net/code/snippet_811941_14131package com.tarena.dingdang.filter; import java...
  • ykletters
  • ykletters
  • 2017-03-17 17:02:53
  • 750

防止常见XSS 过滤 SQL注入 JAVA过滤器filter

1、首先配置web.xml,添加如下配置信息: xssAndSqlFilter com.cup.cms.web.framework.filter.XssAndSqlFilter xss...
  • hithedy
  • hithedy
  • 2016-02-03 16:27:22
  • 12327

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

  • 2009年01月14日 08:37
  • 8KB
  • 下载

防止sql注入过滤器配置

  • 2012年10月24日 15:13
  • 4KB
  • 下载
收藏助手
不良信息举报
您举报文章:SQL注入过滤器
举报原因:
原因补充:

(最多只允许输入30个字)