package com.my.web.filter; import java.io.IOException; import java.util.Enumeration; import java.util.Iterator; 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; import org.apache.log4j.Logger; /** * 防sql注入过滤器,使用时需要注意可能会过滤掉正常访问 * @version 1.0 */ public class SqlFilter implements Filter { public static final Logger logger = Logger.getLogger(sun.reflect.Reflection.getCallerClass(1)); //需要过滤的post参数值字符(不需要空格 可能会对系统访问有影响,请注意删减关键字) private static String postStr="%20,script"; //需要过滤的post字符(可能会对系统访问有影响,请注意删减关键字) //private static String sqlStr="<,>,and,exec,insert,select,%20,delete,update,count,*,%,chr,mid,master,truncate,char,like,declare,&,#,(,),/**/,=,script,\u0023,redirect:,xwork2"; // --and , count private static String sqlStr="exec,insert,select,%20,delete,update,chr,master,truncate,char,like,declare,#,/**/,script,\u0023,redirect:,xwork2"; //需要过滤的url字符(可能会对系统访问有影响,请注意删减关键字) private static String urlStr="%20,%22,%27,<,>,master,truncate,char,script,java.lang.ProcessBuilder,java.lang.String,/etc/,\u0023,redirect:,xwork2,\u0073\u0063\u0072\u0069\u0070\u0074"; public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("utf-8"); HttpServletRequest req = (HttpServletRequest)request; HttpServletResponse res = (HttpServletResponse)response; Enumeration names = req.getParameterNames();//获取所有的表单参数 String gotoUrl=req.getRequestURI(); //获取访问的url String queryString = req.getQueryString(); //判断所有的参数名是否有非法字符 while(names.hasMoreElements()){ String st=names.nextElement().toString(); if(strInj(st,sqlStr)||strInj2(st,urlStr)){ req.getSession().setAttribute("msgStr", "请不要输入非法参数:"+req.getParameter(st)+" !"); res.sendRedirect(req.getContextPath()+"/jsp/common/error.jsp"); return; } } //判断所有的参数值是否有非法字符 Iterator values = req.getParameterMap().values().iterator();//获取所有的表单参数 while(values.hasNext()){ String[] value = (String[])values.next(); for(int i = 0;i < value.length;i++){ if(strInj(value[i],sqlStr)||strInj2(value[i],postStr)){ request.setAttribute("msgStr", "请不要输入非法参数:"+value[i]+" !"); res.sendRedirect(req.getContextPath()+"/jsp/common/error.jsp"); return; } } } //判断访问的url中是否有非法参数 if(queryString!=null&&strInj2(queryString,urlStr)){ req.getSession().setAttribute("msgStr", "请不要输入非法参数 !"); res.sendRedirect(req.getContextPath()+"/jsp/common/error.jsp"); return; } chain.doFilter(request, response); } /** * 判断字符是否包含非法字符 * @param str * @return */ public static boolean strInj(String str,String standStr){ if(str==null||str.length()==0)return false; String[] inj_stra=standStr.split(","); for (int i=0 ; i < inj_stra.length ; i++ ){ if (inj_stra[i].length()>0&&str.toLowerCase().indexOf(inj_stra[i])>=0){ System.out.println(inj_stra[i]); return true; } } return false; } /** * 判断字符是否包含非法字符,没有空格 * @param str * @return */ public boolean strInj2(String str,String standStr){ if(str==null||str.length()==0)return false; String[] inj_stra=standStr.split(","); for (int i=0 ; i < inj_stra.length ; i++ ){ if (inj_stra[i].length()>0&&str.toLowerCase().indexOf(inj_stra[i])>=0){ return true; } } return false; } public void init(FilterConfig cfg) throws ServletException { } public static void main(String[] args){ SqlFilter2 sf = new SqlFilter2(); String st = "standardPrice"; if(strInj(st,sqlStr)){ System.out.println("=======:"+sqlStr.indexOf(st)); } if(sf.strInj2(st,urlStr)){ System.out.println("=======:"+urlStr.indexOf(st)); } } }
web.xml配置
<filter> <filter-name>SqlFilter</filter-name> <filter-class>com.my.web.filter.SqlFilter</filter-class> </filter> <filter-mapping> <filter-name>SqlFilter</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping>
相关推荐
用监听器实现在线人数统计,过滤器实现页面自动编码 非法字符过滤
过滤器过滤用户输入的非法字符,如“” “%” “+”等需要的两个类XssFilter.java和XssHttpServletRequestWrapper.java
此资源系本人在培训机构的资料,资源包含过滤器乱码过滤、过滤非法字符、权限过滤、病毒过滤、HTML标签过滤、js脚本过滤等代码演示实例和讲解文档,内容详细易懂,希望对象大家有所帮助!
六个有用的java过滤器,包括使浏览器不缓存页面的过滤器、检测用户是否登陆的过滤器、字符编码的过滤器、资源保护过滤器、利用Filter限制用户浏览权限、利用Filter过滤非法关键字。
三、过滤器配置 web.xml配置 <filter> <filter-name>XssFilter</filter-name> <filter-class>com.xxx.Filter.XssFilter</filter-class> </filter> <filter-mapping> <filter-name>XssFilter</filter-name> ...
1.过滤器:所谓过滤器顾名思义是用来过滤的,在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的action进行业务逻辑,比如过滤掉非法url(不是login....
比如过滤掉非法url或者在传入servlet/struts的action前统一设置字符集,或者去除掉一些非法字符等; 拦截器--它由spring管理,只对action起作用,不能拦截jsp页面、图片等其他资源。执行顺序:过滤前 - 拦截前 - ...
针对该问题,提出了采用Bloom Filter(布隆过滤器)进行字符串模糊匹配方式,利用Bloom Filter将信息流中大部分正常流量过滤掉,从而减轻了后端的字符串精确匹配的压力,降低了系统功耗,大大提高了处理速度。
44 throw new IOException("您发送请求中的参数中含有非法字符"); 45 //String ip = req.getRemoteAddr(); 46 } else { 47 chain.doFilter(args0,args1); 48 } 49 } 50 51 //效验 52 protected ...
7. 防止XSS攻击,通过XssFilter类对所有的输入的非法字符串进行过滤以及替换。 8. 简单可用的代码生成体系,通过SimpleTemplateEngine可生成带有主页跳转和增删改查的通用控制器、html页面以及相关的js,还可以生成...
6、防止XSS攻击,通过XssFilter类对所有的输入的非法字符串进行过滤以及替换。 7、简单可用的代码生成体系,通过SimpleTemplateEngine可生成带有主页跳转和增删改查的通用控制器、html页面以及相关的js,还可以生成...