利用过滤器实现 论坛或留言板 上内容转义

本文介绍如何通过过滤器(Filter)和装饰设计模式增强getParameter()方法,以确保从客户端提交的论坛或留言板内容中转义可能存在的恶意代码,确保输入与输出内容一致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

***********注意此方法只能解决getParameter()方法取得参数转义,若要彻底解决getParameterMap()和getParameterValues()方法取得参数的转义,则需要使用“关于Filter 覆盖getParameterMap 来实现功能”这篇博文中的方法*******************************************************************************************************************



在客户端提交过来的text片段中,有可能会存在恶意代码。

利用Filter和装饰设计技术来增强getParameter()方法使代码片段进行转义,从而达到输入什么内容就输出什么内容。


建立过滤器类HtmlFilter

package filter;

import java.io.IOException;

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.HttpServletRequestWrapper;

/**
 * HTML转义
 * 
 * @author seawind
 * 
 */
public class HtmlFilter implements Filter {

	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		chain.doFilter(new HtmlRequest((HttpServletRequest) request), response);
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub

	}

}

class HtmlRequest extends HttpServletRequestWrapper {
	private HttpServletRequest request;

	public HtmlRequest(HttpServletRequest request) {
		super(request);
		this.request = request;
	}

	@Override
	public String getParameter(String name) {
		String value = request.getParameter(name);
		return filter(value);
	}

	public static String filter(String message) {

		if (message == null)
			return (null);

		char content[] = new char[message.length()];
		message.getChars(0, message.length(), content, 0);
		StringBuffer result = new StringBuffer(content.length + 50);
		for (int i = 0; i < content.length; i++) {
			switch (content[i]) {
			case '<':
				result.append("<");
				break;
			case '>':
				result.append(">");
				break;
			case '&':
				result.append("&");
				break;
			case '"':
				result.append(""");
				break;
			default:
				result.append(content[i]);
			}
		}
		return (result.toString());

	}

}

然后再web.xml 中对 HtmlFilter 进行配置,在servlet中直接调用增强之后的request即可实现对提交内容的转义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值