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

来源:互联网 发布:java redis实战 pdf 编辑:程序博客网 时间:2024/04/29 20:08
转自:http://www.oschina.net/code/snippet_811941_14131
package com.tarena.dingdang.filter; import java.io.IOException;import java.util.Enumeration; 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; 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 args1,            FilterChain chain) throws IOException, ServletException {        HttpServletRequest req=(HttpServletRequest)args0;        HttpServletRequest res=(HttpServletRequest)args1;         //获得所有请求参数名        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];            }        }        //System.out.println("============================SQL"+sql);        //有sql关键字,跳转到error.html        if (sqlValidate(sql)) {            throw new IOException("您发送请求中的参数中含有非法字符");            //String ip = req.getRemoteAddr();        } else {            chain.doFilter(args0,args1);        }    }         //效验    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;    }}  <!--在web.xml文件中的配置--><!-- 防止SQL注入的过滤器 -->    <filter>        <filter-name>antiSqlInjection</filter-name>        <filter-class>com.tarena.dingdang.filter.AntiSqlInjectionfilter</filter-class>    </filter>    <filter-mapping>        <filter-name>antiSqlInjection</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 别人睡了主卧室怎么办 主卧别人睡过了怎么办 卧室门对着过道怎么办 有墙角对着窗户怎么办 卧室门对着墙角怎么办 冰箱和大门对着怎么办 冰箱对着入户门怎么办 哪来的大路对门怎么办 卧室窗户对着路怎么办 床尾对着窗户怎么办 床头对着厕所门怎么办 5楼阳台对着马路怎么办 宿舍门对着楼梯怎么办 如果镜子对着门怎么办 厕所门对着厨房怎么办 客厅门对着大门怎么办 床头对着厕所墙怎么办 被小狗舔了伤口怎么办 狗狗伤口好不了怎么办 狗的伤口发炎了怎么办 大门正对房门该怎么办 房门正对厕所门怎么办 浴室镜子对着门怎么办 房间门正对厕所怎么办 厕所斜对着大门怎么办 刚开麻将馆没人怎么办 入户门正对电梯怎么办 电梯对着入户门怎么办 电梯门对着房门怎么办 厨房门对入户门怎么办 餐桌对着入户门怎么办 房门正对楼梯下怎么办 电梯门对着家门怎么办 壁纸上的泡沫胶怎么办 卧室镜子对着门 怎么办 电视对着厨房门怎么办 厨房门对着大门怎么办 厨房对着入户门怎么办 入户门正对厨房怎么办 入户门对厨房门怎么办 入户门正对窗户怎么办