`

Filter非法字符过滤器

阅读更多
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>

 

分享到:
评论

相关推荐

    java非法字符过滤器

    ### Java非法字符过滤器:深度解析与应用 在软件开发中,确保数据的完整性和安全性是至关重要的。尤其是在处理用户输入或外部数据源时,非法字符的过滤成为了必不可少的环节。本文将深入探讨一个Java非法字符过滤器...

    过滤器过滤用户输入的非法字符

    3. **处理非法字符**:如果发现非法字符,过滤器可以采取不同的策略,例如替换为安全字符、删除非法字符或者直接阻止请求。 4. **传递请求**:处理完后,过滤器将修改后的请求传递给下一个过滤器或者直接传递到目标...

    监听器访问计数过滤非法字符

    非法字符过滤是Web应用安全的一个重要方面。过滤器可以用来检测和阻止可能包含恶意代码的输入,如SQL注入或跨站脚本(XSS)攻击。例如,我们可以自定义一个Filter类,检查请求参数,如果发现非法字符或敏感词汇,就...

    jsp字符过滤器

    然而,为了保证应用程序的安全性和稳定性,通常需要对用户输入的数据进行过滤和验证,这就是JSP字符过滤器的作用。字符过滤器主要用于防止恶意用户通过提交特殊字符或者执行SQL注入、跨站脚本攻击(XSS)等行为,保护...

    过滤器 乱码,非法字符,权限

    本文将深入探讨标题和描述中涉及的几个关键知识点:过滤器乱码问题、非法字符过滤、权限控制以及病毒和HTML/JS脚本过滤。 1. **过滤器乱码问题**: 在Web应用中,乱码问题经常出现于数据的输入和输出阶段。过滤器...

    简单过滤器的解决非法文字功能

    在IT行业中,过滤器(Filter)是一种常见的编程概念,尤其在Web开发中广泛使用。它是一种中间件,可以在请求被处理之前或之后执行特定的任务,例如数据预处理、权限检查等。在这里,我们讨论的“简单过滤器的解决...

    过滤器(filter) 例子源码

    在Java Web开发中,过滤器(Filter)是一个非常重要的组件,它允许开发者在请求被处理之前或之后执行一些预定义的任务。本篇文章将基于提供的标题和描述,详细讲解过滤器的概念、工作原理以及如何通过源码实现一个...

    使用filter对字符进行过滤

    在Java Web开发中,`Filter`(过滤器)是一个至关重要的组件,它允许开发者在请求到达Servlet之前或离开Servlet之后对请求和响应进行处理。在本案例中,我们关注的是如何使用`Filter`来过滤字符,确保数据的安全性和...

    java filter过滤器

    【Java Filter过滤器详解】 Java Filter是Java Servlet技术的一部分,它允许开发者在Servlet容器中对HTTP请求和响应进行拦截处理,实现数据过滤、权限控制、日志记录等多种功能。Filter的生命周期包括三个主要方法...

    JAVA Web中过滤器

    在JAVA Web开发中,过滤器(Filter)是一个至关重要的组件,它主要负责在请求被Servlet处理之前或之后执行一些预处理或后处理操作。过滤器是JAVA Servlet API的一部分,通过实现javax.servlet.Filter接口来创建...

    过滤器.zip

    在IT领域,过滤器(Filter)是一个非常关键的概念,尤其在Web开发中,它被广泛应用于数据处理和请求响应的预处理或后处理。这里提到的"过滤器.zip"文件包含了一系列的示例项目,从filter_demo到filter_demo5,它们...

    JAVAEE过滤器的使用

    在JAVAEE平台上,过滤器(Filter)是一种强大的工具,它允许开发者在请求到达Servlet之前或Servlet响应返回客户端之后对请求和响应进行处理。过滤器在Java Web应用中扮演着重要角色,可以实现如数据验证、登录检查、...

    javaweb中文过滤器

    除了设置字符编码,中文过滤器还可以扩展其他功能,如检查请求参数是否包含非法字符、进行URL重写等。通过这种方式,我们可以确保JavaWeb应用在处理中文数据时的稳定性和兼容性。 总之,JavaWeb中文过滤器是解决...

    JAVA过滤器及原理

    Java过滤器(Filter)是Java Web开发中的一个重要概念,它主要应用于Servlet容器中,如Tomcat、Jetty等。过滤器允许我们在数据处理前后插入自定义逻辑,对请求和响应进行拦截、修改或增强。本教程将深入讲解Java过滤...

    jsp 过滤器中文乱码的处理

    在本例中,我们可以创建一个名为`ModifyCodeFilter`的过滤器,该过滤器实现`javax.servlet.Filter`接口并覆盖其三个方法:`init()`, `destroy()` 和 `doFilter()`。 `ModifyCodeFilter`的核心代码如下: ```java ...

    结合struts2编写的通用过滤器filter

    在这个框架中,过滤器(Filter)扮演着关键角色,它们负责在请求到达实际处理之前进行预处理,或者在响应发送给客户端之后进行后处理。本示例中的“通用过滤器filter”是专门为Struts2设计的,用于增强应用的安全性...

    Filter过滤器笔记1

    **Filter过滤器详解** 在Java Web开发中,Filter过滤器是一种强大的工具,它属于JavaEE规范中的重要组成部分,与Servlet程序、Listener监听器并称为三大组件。Filter的主要职责是拦截客户端的请求和服务器的响应,...

    过滤器操作数据库验证合法用户

    在Java Web开发中,过滤器(Filter)是一个非常重要的组件,它主要用于在请求被实际处理之前或之后执行一些预处理或后处理任务。过滤器在Servlet规范中定义,是实现Servlet API的一部分,允许开发者对HTTP请求和响应...

    Servlet之过滤器

    总结起来,Servlet过滤器是Java Web开发中的强大工具,能够帮助我们执行预处理和后处理任务,如验证非法字符、控制用户访问权限以及统一数据编码。通过合理配置和组合使用过滤器,我们可以构建出安全、高效且易于...

    javaxss必备jar包及过滤器代码

    接下来,我们要讨论的是过滤器(Filter)在Java Web应用程序中的角色。在Java Servlet规范中,过滤器是一个接口,允许开发者在请求到达目标Servlet之前或之后拦截和处理请求和响应。在XSS防护上下文中,过滤器可以...

Global site tag (gtag.js) - Google Analytics