`
gongchangming
  • 浏览: 45548 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

非法字符过滤 HttpServletRequest

阅读更多
IllegalCharacterFilter.java
package *;

import java.io.IOException;
import java.util.Date;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
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.http.HttpRequest;

import *.IllegalWordUtil;

public class IllegalCharacterFilter implements Filter {
	
	
	private ServletContext context;
	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		   HttpServletRequest servletrequest = (HttpServletRequest) request;
		   HttpServletResponse servletresponse = (HttpServletResponse) response; 
		   String param = "";
		   String paramValue = "";
		   servletresponse.setContentType("text/html");
		   servletresponse.setCharacterEncoding("utf-8");
		   servletrequest.setCharacterEncoding("utf-8");
		   java.util.Enumeration params = request.getParameterNames();//获取request中所有参数的名称
		   while (params.hasMoreElements()) {
			    param = (String) params.nextElement();
			    String[] values = servletrequest.getParameterValues(param);//获取每个参数的value
			   
			    for (int i = 0; i < values.length; i++) {
			    	System.out.println(param+"="+values[i]);
				     paramValue = values[i];
				    
				     paramValue = paramValue.replaceAll("<", "&lt");
				     paramValue = paramValue.replaceAll(">", "&gt");
				     if(IllegalWordUtil.isIllegalWord(paramValue)){
				    	 context.log("["+request.getRemoteHost()+"] url:"+((HttpRequest)request).getRequestLine());
				    	 context.log("["+param+"] value:"+paramValue);
				    	 context.log("["+new Date()+"]");
				    	 //替换非法关键字。
				    	 values[i] = IllegalWordUtil.filterIllegalWords(paramValue);
				    	 
				     }
			    
			    }
			    //把转义后的参数重新放回request中
			    request.setAttribute(param, paramValue);
		   }
		   //继续
		   chain.doFilter(request, response);
	}

	@Override
	public void init(FilterConfig config) throws ServletException {
		context = config.getServletContext();
	}

}



IllegalWordUtil.java
package *;

import java.io.IOException;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class IllegalWordUtil{
	protected static final Logger logger = LoggerFactory.getLogger(IllegalWordUtil.class);
	
	private final static String pattern;
	private final static String replacement;
	private final static String illegalWords;
	private final static String illegalWordRegx;
	private static Pattern patterns = null;
	static{
		Properties properties = new Properties();  
		try{
			properties.load(IllegalWordUtil.class.getResourceAsStream("/illegal.keywords.properties"));
		}catch(IOException ioe){
			ioe.printStackTrace();
			logger.error("Cound not load illegal.keywords.properties");
			throw new RuntimeException("Cound not load illegal.keywords.properties");
		}
		
		illegalWords = properties.getProperty("words", "");
		pattern = properties.getProperty("pattern", ",");
		replacement = properties.getProperty("replacerex", "***");;
		illegalWordRegx = "(" + illegalWords.trim().replaceAll(pattern, "|") + ")";
		patterns = Pattern.compile(new String(illegalWordRegx.toString()));
	}
	
	public static String filterIllegalWords(String sentence) {
		Matcher m = patterns.matcher(sentence);
		return m.replaceAll(replacement);
	}

	public static boolean isIllegalWord(String word) {
		Matcher m = patterns.matcher(word);
		return m.find(0);
	}
	

}


web.xml
<filter>
		<filter-name>IllegalCharacterFilter</filter-name>
		<filter-class>desirelist.web.servlet.IllegalCharacterFilter</filter-class>
	</filter>
<filter-mapping>
    	<filter-name>UrlRewriteFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

分享到:
评论

相关推荐

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

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

    jsp字符过滤器

    // 过滤非法字符 paramValue = paramValue.replaceAll("[&lt;&gt;\"\'%]", ""); } req.setParameter(paramName, paramValues); } chain.doFilter(request, response); } } ``` 在这个例子中,我们使用正则...

    使用filter对字符进行过滤

    3. **HttpServletRequest中的字符过滤**: - 使用`getParameter()`或`getParameterValues()`获取参数后,可以对每个参数值执行自定义的过滤逻辑,例如使用正则表达式检查非法字符,或者替换敏感信息。 - 过滤后的...

    SQL注入过滤 (Java版)

    // 实现检查逻辑,如:非法字符检测、SQL关键字检测等 } // 其他Filter接口方法实现... } ``` `isSuspicious`方法可以根据实际需求进行实现,例如检查字符串是否包含SQL关键字、特殊字符等。此外,还可以使用...

    web开发中必不可少的过滤器

    本篇文章将深入探讨“web开发中必不可少的过滤器”,以及如何利用过滤器解决乱码及非法字符串转换的问题。 首先,让我们了解过滤器的基本概念。在Java Servlet规范中,过滤器是通过实现javax.servlet.Filter接口来...

    过滤器简单使用代码!!

    过滤器也可以用于检查请求参数中的特殊字符或者非法输入,确保数据的安全性。例如,你可以创建一个过滤器来移除或替换用户输入中的危险字符: ```java public class InputSanitizerFilter implements Filter { ...

    javaxss必备jar包及过滤器代码

    除了上述方法,还可以使用其他防御策略,例如使用HTTP头部的`Content-Security-Policy`来限制浏览器只接受特定来源的脚本,或者使用输入验证库来限制和格式化用户输入,防止非法字符或语法的注入。 总结来说,...

    六个有用的java过滤器

    过滤非法关键字过滤器用于防止恶意用户通过提交含有非法关键字的数据来攻击网站。实现方法如下: ```java import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import java.util.Set; import ...

    Java Web过滤器详解

    例如,在处理用户的输入数据时,我们可以使用过滤器来过滤掉一些非法字符,以避免系统的安全性问题。 四、图像格式转换 过滤器可以对响应的内容进行图像格式转换。例如,在Web应用程序中,我们可以使用过滤器来将...

    jsp 过滤器中文乱码的处理

    在这个过滤器中,我们首先将请求转换为`HttpServletRequest`对象,然后调用`setCharacterEncoding()`方法设定字符编码为目标编码(如GBK或UTF-8),最后将请求传递给下一个过滤器或目标Servlet。 为了使过滤器生效...

    servlet验证码制作和过滤器

    2. **安全过滤**:检查请求参数,过滤掉非法字符或SQL注入攻击。这可以通过分析请求参数,使用正则表达式匹配,或者使用预定义的安全库如OWASP Java Encoder。 3. **登录验证**:在用户访问受保护资源之前,过滤器...

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

    综上所述,"过滤器操作数据库验证合法用户"是一个涉及用户身份验证、数据库交互、字符编码处理以及过滤器配置等多个知识点的实践。通过学习和掌握这些技能,开发者可以构建更安全、更健壮的Java Web应用程序。在提供...

    Servlet之过滤器

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

    拦截器和过滤器的区别

    - 使用场景:适用于所有HTTP请求,如统一设置字符集、登录验证、过滤非法请求等。 - 特点:依赖于Servlet容器,可对所有请求生效。 #### 四、关键区别 1. **依赖关系**: - **拦截器**不依赖于Servlet容器,...

    拦截器、过滤器、参数读取坑记录

    3. 非法字符:对用户输入进行校验,防止SQL注入等安全问题。 4. 数组类型:当参数值为数组时,需要注意处理方式。 ### 4. config解析 在Web应用中,配置文件(如application.properties或application.yml)通常...

    JSP使用过滤器防止Xss漏洞

    - 对用户输入进行严格的验证,限制输入长度和格式,避免非法字符。 总的来说,通过创建自定义的过滤器,我们可以实现一种统一的、全局的XSS防护策略,减少在每个页面或业务逻辑中手动编码的工作量。然而,这并不是...

    网页聊天室

    在这个项目中,可能被用来自定义请求参数的处理,如添加安全验证或过滤非法字符,以增强系统的安全性。 过滤器(Filter)是Servlet规范的一部分,它允许我们在请求到达Servlet之前或Servlet响应发送出去之后对其...

    xssprotect防止XSS攻击源码

    2. 过滤敏感字符:对每个参数值进行检查,移除或转义可能的XSS攻击代码,如`&lt;script&gt;`、`&lt;/script&gt;`、`javascript:`等。 3. 防止URL重定向攻击:XSS攻击有时会利用URL重定向进行,因此需要检查请求中的URL参数,防止...

    java sql注入l

    44 throw new IOException("您发送请求中的参数中含有非法字符"); 45 //String ip = req.getRemoteAddr(); 46 } else { 47 chain.doFilter(args0,args1); 48 } 49 } 50 51 //效验 52 protected ...

    注册网页用java 做的简单的几个

    2. 验证用户输入:确保所有字段都有有效值,并过滤非法字符。 3. 密码安全:使用安全的哈希算法,并添加随机盐值。 4. 防止跨站脚本攻击(XSS):对用户输入进行转义或过滤。 在实际开发中,可能还会涉及用户认证、...

Global site tag (gtag.js) - Google Analytics