码迷,mamicode.com
首页 > 数据库 > 详细

防sql注入的过滤器

时间:2015-07-26 17:32:24      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:sql注入

  1. 首先在web.xml中配置

<!-- 防sql注入过滤器 -->

<filter>

<filter-name>antiSqlInjection</filter-name>

<filter-class>com.usermanage.util.AntiSqlInjectionfilter</filter-class>

</filter>

<filter-mapping>

<filter-name>antiSqlInjection</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

2.具体逻辑实现

package com.usermanage.util;


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;

import javax.servlet.http.HttpServletResponse;


public class AntiSqlInjectionfilter implements Filter {


@Override

public void destroy() {


}


@Override

public void doFilter(ServletRequest arg0, ServletResponse arg1,

FilterChain chain) throws IOException, ServletException {

 HttpServletRequest req=(HttpServletRequest)arg0;

      HttpServletResponse res=(HttpServletResponse)arg1;

 //获得所有请求参数名

        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)) {

        res.setContentType("text/html;charset=utf-8");

        res.getWriter().print("请不要尝试sql注入<br><a href=‘javascript:;‘ onclick=‘history.go(-1)‘>返回</a>");

           // throw new IOException("您发送请求中的参数中含有非法字符");

            //String ip = req.getRemoteAddr();

        } else {

            chain.doFilter(arg0,arg1);

        }

}

//效验

    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;

    }


@Override

public void init(FilterConfig arg0) throws ServletException {


}


}


防sql注入的过滤器

标签:sql注入

原文地址:http://hatch.blog.51cto.com/9349645/1678482

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!