`

filter替换(过滤)非法字符

阅读更多
功用: 如果用户提交(POST或PUT)的文本中含有定义的关键词(字)时,将其转义

--------------------------------------------------------------------------------

一个关健词文件keywords.properties:

<=*
>=*
'=*


--------------------------------------------------------------------------------
RequestWrapper

import java.util.Enumeration;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

import org.apache.cxf.common.util.StringUtils;

public class KeyWordRequestWrapper extends HttpServletRequestWrapper {

	private Properties props;

	public KeyWordRequestWrapper(HttpServletRequest request, Properties props) {
		super(request);
		this.props = props;
	}

	@Override
	public Map getParameterMap() {
		super.getContextPath();
		Map<String, String[]> map = super.getParameterMap();
		if (!map.isEmpty()) {
			Set<String> keySet = map.keySet();
			Iterator<String> keyIt = keySet.iterator();
			while (keyIt.hasNext()) {
				String key = keyIt.next();
				String[] values = map.get(key);
				for (int i = 0; i < values.length; i++) {
					map.get(key)[i] = this.replaceParam(values[i]);
				}
			}
		}
		return map;
	}

	@Override
	public String getParameter(String str) {
		String s = super.getParameter(str);
		return replaceParam(s);
	}

	@Override
	public String[] getParameterValues(String str) {
		String[] ss = super.getParameterValues(str);
		if (ss == null || ss.length == 0) {
			return ss;
		}
		String[] ss2 = new String[ss.length];
		for (int i = 0; i < ss2.length; i++) {
			ss2[i] = replaceParam(ss[i]);
		}
		return ss2;
	}

	private String replaceParam(String string) {
		if (StringUtils.isEmpty(string)) {
			return string;
		}
		String sb = new String(string);
		Enumeration en = props.propertyNames();
		while (en.hasMoreElements()) {
			String s = en.nextElement().toString();
			if (string.contains(s)) {
				sb = sb.replaceAll(s, props.getProperty(s));
			}
		}
		return sb;
	}

}


--------------------------------------------------------------------------------
filter:

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class CharacterReplaceFilter implements Filter {

	private final Logger LOG = LoggerFactory.getLogger(CharacterReplaceFilter.class);
	private final static String KEY = "filePath";

	private FilterConfig filterConfig = null;

	private static Properties props = new Properties();

	public void init(FilterConfig filterConfig) throws ServletException {
		this.filterConfig = filterConfig;
		String value = this.filterConfig.getInitParameter(KEY);
		InputStream ins = CharacterReplaceFilter.class.getClassLoader().getResourceAsStream(value);
		try {
			props.load(ins);
			LOG.info("敏感词文件加载成功");
		} catch (IOException e) {
			LOG.error("加载敏感词文件时发生错误", e);
		}
	}

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
			ServletException {
		HttpServletRequest httpReq = (HttpServletRequest) request;
		final String method = httpReq.getMethod();
		if (method.equalsIgnoreCase("POST") || method.equalsIgnoreCase("PUT")) {
			KeyWordRequestWrapper wrapper = new KeyWordRequestWrapper((HttpServletRequest) request, props);
			chain.doFilter(wrapper, response);
		} else {
			chain.doFilter(request, response);
		}
	}

	public void destroy() {
		filterConfig = null;
		props = null;
	}

}



--------------------------------------------------------------------------------
web.xml:

<!-- 处理敏感字符 -->
	<filter>
		<filter-name>keywordFilter</filter-name>
		<filter-class>com.xxx.wdss.web.filter.CharacterReplaceFilter</filter-class>
		<init-param>
			<param-name>filePath</param-name>
			<param-value>properties/keywords.properties</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>keywordFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
<!-- / 处理敏感字符 -->

分享到:
评论

相关推荐

    java非法字符过滤器

    - `filter(String str)`:核心过滤方法,遍历整个输入字符串,执行非法字符的检测与替换操作。 3. **动态配置非法字符**: - `put(String key)`:允许动态添加新的非法字符及其替代字符串,同时更新`maxLength`以...

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

    本文将深入探讨标题中的两个关键类:`XssFilter.java` 和 `XssHttpServletRequestWrapper.java`,以及它们在过滤非法字符中的作用。 首先,`XssFilter.java` 是一个实现了Servlet过滤器接口(javax.servlet.Filter...

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

    本文将详细讲解如何利用监听器进行访问计数以及通过过滤器来过滤非法字符,以确保系统的安全性和用户体验。 首先,我们来看监听器。在Java的Servlet规范中,监听器是一种特殊的Servlet组件,它能够监听特定的事件并...

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

    2. **过滤非法字符**: 非法字符可能引起安全问题或者导致程序异常。过滤器可以检测和替换或者移除这些字符。例如,用户提交的数据中可能存在SQL注入攻击的特殊字符,过滤器可以检查并过滤这些字符,防止恶意操作。...

    jquery输入字符过滤

    二是清洗,如果检测到非法字符,将其替换或删除。这在表单提交、实时输入验证、AJAX数据发送等场合尤为关键,能防止SQL注入、XSS跨站脚本攻击等安全问题。 二、jQuery实现字符过滤 1. **自定义事件监听**:可以...

    java正则表达式 过滤特殊字符的正则表达式

    @#$%^&*()` 等,然后使用 `replaceAll` 方法将这些特殊字符替换为空字符串,从而达到过滤特殊字符的目的。 正则表达式的基本概念 正则表达式是一个强大的文本处理工具,它可以对字符串进行复杂的匹配、提取和替换...

    使用filter对字符进行过滤

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

    Python sql注入 过滤字符串的非法字符实例

    ### Python SQL注入与过滤非法字符详解 在软件开发过程中,特别是在Web应用开发中,SQL注入是一种常见的安全威胁。为了防止这种攻击,开发者需要确保输入到应用程序中的数据是安全的,尤其是那些将被直接用于构建...

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

    3. **字符替换**:找到非法字符后,你可以选择删除它们,或者用其他字符(如星号(*))替换。这通常通过字符串的replace()函数实现。 4. **异常处理**:为了保证程序的健壮性,需要处理可能出现的异常情况,比如空...

    Java过滤特殊字符的正则表达式.doc

    例如,在实际项目中,可能需要过滤用户输入的非法字符,或者从大量文本数据中提取有用的信息,这些都可以借助正则表达式的强大功能来实现。 总结来说,Java 中的正则表达式是非常有用的工具,它可以帮助我们高效地...

    过滤非法文字.rar

    在过滤非法文字的场景下,正则表达式尤其重要,因为它可以用来匹配和替换特定模式的字符串。例如,如果我们要过滤所有的特殊字符,我们可以创建一个正则表达式,匹配非字母数字的字符,并用`replace()`函数替换为空...

    PHP 字符串的过滤方法

    字符串过滤通常指的是去除或替换字符串中的不必要、非法或潜在危险的字符。这在诸如用户输入验证、URL编码、HTML清理等场景中非常有用,可以防止SQL注入、跨站脚本攻击(XSS)等安全问题。 PHP提供了多种内置函数来...

    过滤HTML元素字符

    在这个例子中,`filterHtml`方法首先使用字符串替换转义了HTML特殊字符,然后使用正则表达式匹配并删除了`&lt;script&gt;`、`&lt;style&gt;`和`&lt;iframe&gt;`这三个常见的危险标签。最后,通过`main`方法调用`filterHtml`来演示过滤...

    filterdemo代码

    `filterdemo代码`涉及到的是如何使用Java编程语言中的过滤器(Filter)技术来保护Web应用程序,防止恶意用户通过输入特殊字符来执行非法操作或者破坏系统。过滤器是Java Servlet API提供的一种机制,允许我们在请求...

    asp.net 使用Response.Filter 过滤非法词汇

    在这个类的Write方法中,实现了过滤非法词汇的逻辑。具体地,该方法首先将响应数据从字节流转换为字符串,然后利用正则表达式定义要被过滤掉的非法词汇。接着,遍历每一个非法词汇,并将其从字符串中移除,替换成...

    java 请求参数过滤拦截

    可以使用预编译的PreparedStatement来防止SQL注入,或者使用正则表达式检查并替换非法字符。 2. **XSS(Cross-Site Scripting)防御**:对所有输出到页面的用户输入进行转义,确保不会执行任何JavaScript代码。可以...

    Java Web过滤器详解

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

    Servlet之过滤器

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

    易语言字符过滤-易语言

    对于更复杂的字符过滤需求,如去除空白字符、过滤非法字符等,易语言提供了更为强大的工具。例如,可以结合循环结构和条件判断,对字符串中的每个字符进行逐一检查,满足条件则保留,否则剔除。同时,可以使用`正则...

Global site tag (gtag.js) - Google Analytics