`

HTML特殊字符过滤器

阅读更多

/**
 * HTML标签过滤,防止用户恶意提交带HTML标签的数据
 * 
 * @author liulg
 */
public class HTMLCharacterRequest extends HttpServletRequestWrapper {

	public HTMLCharacterRequest(HttpServletRequest request) {
		super(request);
	}

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

	@Override
	@SuppressWarnings("unchecked")
	public Map getParameterMap() {
		Map<String, String[]> map = super.getParameterMap();
		Map<String, String[]> map_ = new HashMap<String, String[]>();

		Set<Entry<String, String[]>> set = map.entrySet();
		Iterator<Entry<String, String[]>> it = set.iterator();
		while (it.hasNext()) {
			Entry<String, String[]> entry = it.next();
			if (entry != null && entry.getValue() != null
					&& entry.getValue().length > 0) {
				String[] array = new String[entry.getValue().length];
				for (int i = 0; i < entry.getValue().length; i++) {
					array[i] = filter(entry.getValue()[i]);
				}
				map_.put(entry.getKey(), array);
			}
		}
		return map_;
	}

	@Override
	public String[] getParameterValues(String name) {
		String[] values = super.getParameterValues(name);
		if (values == null || values.length == 0)
			return values;
		for (int i = 0; i < values.length; i++) {
			String str = values[i];
			values[i] = filter(str);
		}
		return values;
	}

	private String filter(String value) {
		if (StringUtil.isNotBlank(value)) {
			value = value.replaceAll("<", "[").replaceAll(">", "]");
		}
		return value;
	}

}





/**
 * 权限访问控制
 * 
 * @author luo
 */
public class PermitFilter implements Filter {

	private static Map<String, Object> sysMenusMap = new HashMap<String, Object>();
	
	private static String[] params = null;

	private final static String LOGIN_VIEW = "/jsp/index/login.jsp";

	public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
			throws IOException, ServletException {

		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) resp;
		
		String uri = request.getRequestURI();
		String contextPath = request.getContextPath();
		uri = uri.substring(contextPath.length());
		
		Object obj = request.getSession().getAttribute(Constant.USER_SESSION);
		
		
		if(obj == null){
			
			//未登录可放行的访问
			for (String p : params) {
				if (uri.startsWith(p)) {
					chain.doFilter(req, resp);
					return;
				}
			}
			//aJax访问 (未登录不可放行)
			if (request.getHeader("x-requested-with") != null
					&& request.getHeader("x-requested-with").equalsIgnoreCase( // ajax超时处理
							"XMLHttpRequest")) {
				JspUtils.print(response, "timeout");
				return;
			}
			//普通访问 (未登录不可放行)
			request.getRequestDispatcher(LOGIN_VIEW).forward(req, resp);
			
		}else{
			
			//是否越权访问
			Users user  = (Users) obj;
			List<Menu> menus = new ArrayList<Menu>(user.getRose().getMenus());
			 
			boolean flag =false;
			if(sysMenusMap.get(uri) != null){
				for (Menu menu : menus) {
					if(StringUtil.isNotBlank(menu.getMenuUrl())) 
						if(uri.equals("/"+menu.getMenuUrl())){
							flag=true;
							break;
						}	
				}
			}else{
				chain.doFilter(new HTMLCharacterRequest(request), resp);
				return;
			}
			
			
			if(flag){
//				chain.doFilter(request, resp);
				chain.doFilter(new HTMLCharacterRequest(request), resp);
				return;
			}else{
				JspUtils.print(response, "<script>alert('无权访问');</script>");
				return ;
			}
			 
		}
		
	}

	public void init(FilterConfig config) throws ServletException {
		params = config.getInitParameter("p").split(",");
		RoseDao roseDao = (RoseDao) Springs.getApp().getBean("roseDaoImpl");
		List<Menu> sysMenus =  roseDao.findAllMenuBy_URL_NOTNULL();
		for (Menu menu : sysMenus) {
			sysMenusMap.put("/"+menu.getMenuUrl(), menu.getMenuName());
		}
	}

	public void destroy() { }

	 

}

分享到:
评论

相关推荐

    xss特殊字符拦截与过滤

    标题《xss特殊字符拦截与过滤》以及描述《滤除content中的危险HTML代码,主要是脚本代码,滚动字幕代码以及脚本事件处理代码》提示我们这个文件内容是关于XSS(跨站脚本攻击)防护的编程实现。XSS攻击是指攻击者通过...

    jsp字符过滤器

    字符过滤器主要用于防止恶意用户通过提交特殊字符或者执行SQL注入、跨站脚本攻击(XSS)等行为,保护服务器免受攻击。 一、JSP过滤器基础 JSP过滤器是基于Servlet规范的Filter接口实现的,它可以拦截请求,对请求和...

    java字符过滤器,过滤器

    Java字符过滤器,也称为字符编码转换器,是Java编程中处理字符编码问题的重要工具。在处理文本数据时,尤其是在网络传输或者读取不同编码格式的文件时,可能会遇到字符乱码的问题。Java过滤器就是为了解决这些问题,...

    Java过滤器,字符过滤,标签过滤

    总结来说,这个Java过滤器小样例提供了字符过滤和标签过滤的实现,有助于提升Web应用的安全性和数据一致性。通过研究这个项目,开发者可以学习到如何在实际项目中应用过滤器,以及处理字符编码问题,这对于任何涉及...

    彻底根治Spring @ResponseBody JavaScript HTML特殊字符

    在开发Web应用时,我们经常会遇到一个问题:当使用Spring MVC的`@ResponseBody`注解将后端处理结果直接转化为HTTP响应体时,如果这个结果中包含HTML特殊字符,如尖角号、引号、按位与符号等,浏览器可能会误解析,...

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

    另外,一些特殊字符可能导致HTML解析错误,也可以通过过滤器进行处理。通常,我们可以编写正则表达式来匹配和处理这些非法字符。 3. **权限过滤**: 权限过滤是Web应用安全性的重要组成部分,用于控制不同用户访问...

    【Struts】设置字符编码过滤器,解决乱码问题收藏

    在开发Java Web应用程序时,尤其是使用Struts框架时,经常遇到的一个问题是字符编码不一致导致的乱码问题。本文将详细讲解如何通过设置字符编码...对于处理包含多语言或特殊字符的项目,正确设置字符编码更是至关重要。

    java字符编码监听器

    在实际项目中,我们可能需要编写一些测试用例来验证字符编码过滤器的效果,比如包含特殊字符的表单提交,或者不同编码的URL请求等。 6. **最佳实践** - 为确保整个应用的一致性,建议在所有的HTTP响应中都明确指定...

    过滤HTML元素字符

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

    java 请求参数过滤拦截

    这里的“java请求参数过滤拦截”主要是指在接口接收到用户输入的数据时,通过过滤器(Filter)对参数进行检查,防止恶意攻击者利用特殊字符执行SQL注入、跨站脚本攻击(XSS)等危害。下面我们将详细探讨这一主题。 ...

    wap代码 html过滤器(java)

    3. **处理`&lt;img&gt;`标签的特殊逻辑**:对于图片标签,过滤器会检查是否包含特定的_wap_标识,如果存在,则进行路径调整,以适应WAP环境下的图片加载要求。 4. **最终的字符串构建与返回**:经过一系列的转换和处理后,...

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

    这可能是一个包含特殊字符、HTML标签、SQL注入攻击字符等的集合。 2. **字符串匹配**:使用正则表达式(Regular Expression)进行匹配,找出并定位非法字符。正则表达式是强大的文本处理工具,能够灵活地匹配各种...

    java过滤html代码

    在 `main` 方法中,我们创建了一个包含HTML的示例字符串,并调用 `removeHtmlTags` 进行过滤,最后打印出过滤后的结果。 当然,这种方法并不是万能的,它可能无法处理复杂的HTML结构,例如嵌套的标签、属性、注释等...

    过滤器介绍及代码

    ### 过滤器(Filter)概述与应用 #### 一、Filter简介 过滤器(Filter)作为Servlet技术中的一项重要特性,为Web开发者提供了强大的工具,用于对Web服务器上托管的各种资源进行拦截处理。这些资源包括但不限于JSP...

    servlet中的过滤器与监听器

    一个常见的过滤器示例是字符集编码过滤器,用于确保所有请求都以正确的字符集解析: ```java @WebFilter(filterName = "CharacterEncodingFilter", urlPatterns = "/*") public class CharacterEncodingFilter ...

    servlet过滤器配置,解决JSP的所有乱码

    在Java Web开发中,Servlet过滤器(Filter)是一种强大的工具,它可以用来处理各种问题,包括但不限于解决字符编码问题。在标题“servlet过滤器配置,解决JSP的所有乱码”和描述“JSP页面获得servlet是不是经常出现...

    Filter过滤器1

    同时,Filter 也可以用于实现一些特殊的功能,例如禁用页面缓存、字符编码过滤器等。然而,Filter 也存在一些缺点,例如可能会影响应用程序的性能,需要合理地使用 Filter。 在实际应用中,Filter 广泛应用于各种 ...

    高效字符替换器,可以替换如网页等文件里不理想的字符

    例如,如果你发现你的网页中有一些不理想的字符,如特殊符号、非ASCII字符或者是被黑客插入的恶意代码,你可以使用字符替换器来批量替换这些内容,而无需逐个手动修改。 在描述中提到的CMS(内容管理系统)场景中,...

    HTML代码过滤技术

    4. 编码转换:为了防止编码绕过,需要对某些特殊字符进行转义,例如将`转换为`&lt;`,防止HTML标签被误解释。 5. 输出重构:在应用所有过滤规则后,将修改后的解析树转换回HTML字符串,供服务器发送给客户端。 ...

Global site tag (gtag.js) - Google Analytics