package bxconn; 
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.lang.String.*;
import java.lang.*;/************************************************************************************************************** 
* 名称:Url中注入过滤器
*
* 功能:可以过滤,导向到错误页,防止代码泄漏
*
* 需要的设置:Web.Xml文件中需要进行如下设置
*  <filter> 
* <filter-name>urlfilter</filter-name> 
* <filter-class>bxconn.urlfilter</filter-class> 
* </filter> 
*
* <filter-mapping> 
* <filter-name>urlfilter</filter-name> 
* <url-pattern>/*</url-pattern> 
* </filter-mapping>
*
*   编译后的class文件要放在class\bxconn文件夹下,改变Web.xml文件后需要重启Tomcat服务器
*
* 作者:internet
*
* 日期:2006-11-1
*
*
****************************************************************************************************************/public class urlfilter extends HttpServlet implements Filter {
  public void doFilter(ServletRequest request,
                  ServletResponse response,
                  FilterChain chain)
      throws ServletException, IOException {
    HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
   String url1=(String)((HttpServletRequest)request).getRequestURI();
 

   if(!sql_inj(url1))
   {
  chain.doFilter(request,response);   }else{
res.sendRedirect(req.getContextPath()+"/err.jsp"); //设置转向的错误页面}
  }
  
  //过滤函数
 
public static boolean sql_inj(String str) 
{
String inj_str ="' and exec insert select delete update count * % chr mid master truncate char declare ; or - + ,";
String inj_stra[] = inj_str.split(" ");     for (int i=0 ; i < inj_stra.length ; i++ )
    {
        if (str.indexOf(inj_stra[i])>=0)
        {
            return true;
        }
    }
    return false;
}  
 
//过滤结束
  public void init(FilterConfig config)
      throws ServletException {
  }  public void destroy() {}
}写了个jsp版的,但是有一点缺憾,还是会扫描到一些表,我不知道问题出在哪里,请大虾不惜吝教!

解决方案 »

  1.   

    写了个jsp版的,但是有一点缺憾,还是会扫描到一些表,我不知道问题出在哪里,请大虾不惜吝教!
      

  2.   

    用prepareStatement而不用createStatement就可以防SQL注入了...不必写什么Filter
    如下:
    ......
    String sql="select * from table where name=? and password=?"
    PrepareStatement ps=connection.prepareStatement(sql);ps.setString(1,name);
    ps.setString(2,password);
    ps.execute();
    ......