`
darklipeng
  • 浏览: 126193 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

使用spring的DelegatingFilterProxy 写xss filter

    博客分类:
  • J2EE
阅读更多

最近需要写个xss过滤器,将访问网站的所有请求参数都进行xss过滤,过滤的api使用的是antisamy-1.4.4

java代码

 

public class XssFilter implements Filter {

	private static final Logger log = LoggerFactory.getLogger(XssFilter.class);
	
	public static final String POLICY_FILE_LOCATION = "antisamy-slashdot-1.4.4.xml";
	
    private List<String> filterChainDefinitions;
    
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		String path = ((HttpServletRequest) request).getContextPath();
		String uri = ((HttpServletRequest) request).getRequestURI().replace(path, "");
		Map m = request.getParameterMap();
		if (matchUri(uri)) {
			try {
				m = this.clearRequestPra(request,new HashMap());
			} catch (Exception e) {
				log.info(e.toString());
			}
		}
		
		ParameterRequestWrapper wrapRequest=new ParameterRequestWrapper(((HttpServletRequest) request),m);         
	    chain.doFilter(wrapRequest, response); 
	}
	
	private Map clearRequestPra(ServletRequest request,Map m)
	{
		Map params = request.getParameterMap();
		
	      Set<String> keys = params.keySet();  
	      for (String key : keys) { 
	    	Object value = params.get(key);
	    	if (value instanceof String[]) {
            	value = (String[])value;
            	String[] str = (String[])value; 
            		int i =0;
                	for(String v:(String[])value)
                	{
                		v = this.scan(v);
                		str[i] = new String(v);
                		i++;
                	}
                	m.put(key,str);
	    	}
	    	else
	    	{
	    		m.put(key,value);
	    	}
	      }
		
        return m;
	}
	
	private String scan(String content)
	{
		String cleanHtml = "";
		try{
			Policy policy = Policy.getInstance(POLICY_FILE_LOCATION);
			AntiSamy as = new AntiSamy();
			CleanResults cr = as.scan(content, policy);
			cleanHtml = cr.getCleanHTML();
		}
		catch(Exception e)
		{
			log.info(e.toString());
		}
		return cleanHtml;
	}
	
	private boolean matchUri(String uri)
	{
		for(String pattern:filterChainDefinitions)
		{
			if(Pattern.matches(pattern,uri))
			{
				return true;
			}
				
		}
		return false;
	}

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

	public List<String> getFilterChainDefinitions() {
		return filterChainDefinitions;
	}

	public void setFilterChainDefinitions(List<String> filterChainDefinitions) {
		this.filterChainDefinitions = filterChainDefinitions;
	}
	
}

 application-context-security.xml

 

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="  
         http://www.springframework.org/schema/beans  
         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
         http://www.springframework.org/schema/context   
         http://www.springframework.org/schema/context/spring-context-3.0.xsd  
         http://www.springframework.org/schema/util  
         http://www.springframework.org/schema/util/spring-util-3.0.xsd"
	default-lazy-init="true">
	
	<description>Security Config</description>
	
	<!-- Shiro Filter -->
	<bean id="xssFilter" class="com.shurrik.security.XssFilter">
		<property name="filterChainDefinitions">
			<list>
				<!-- <value>^/module.*</value> -->
				<value>^/.*</value>
			</list>
		</property>	
	</bean>

</beans>  

 

web.xml 

 

	<!-- Xss filter-->
	<filter>
		<filter-name>xssFilter</filter-name>
		<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
	    <init-param>
	        <param-name>targetFilterLifecycle</param-name>
	        <param-value>true</param-value>
	    </init-param>
	    <init-param>
	        <param-name>targetBeanName</param-name>
	        <param-value>xssFilter</param-value>
	    </init-param>	    
	</filter>
		
	<filter-mapping>
		<filter-name>xssFilter</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>INCLUDE</dispatcher>		
	</filter-mapping>

 

分享到:
评论

相关推荐

    精彩:Spring Security 演讲PPT

    &lt;filter-class&gt;org.springframework.web.filter.DelegatingFilterProxy&lt;/filter-class&gt; &lt;/filter&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;springSecurityFilterChain&lt;/filter-name&gt; &lt;url-pattern&gt;/* &lt;/filter-mapping...

    Spring Security模块

    2. **过滤器链**:Spring Security 的过滤器链开始工作,首先是 `DelegatingFilterProxy`,它将请求转发给 Spring Security 的过滤器链。 3. **匿名身份验证**:如果用户尚未登录,Spring Security 会提供一个匿名...

    spring security

    【Spring Security】是Spring生态体系中的一个安全框架,主要用于企业级应用的安全管理,包括认证、授权、会话管理以及防止XSS、CSRF等安全威胁。它的设计目标是简化应用程序的安全性,使得开发者可以专注于业务逻辑...

    spring-security入门

    `filter`部分定义了一个名为`springSecurityFilterChain`的过滤器,它是Spring Security的核心,由`DelegatingFilterProxy`实现,它委托给Spring应用上下文中定义的安全过滤链。 `filter-mapping`指定了这个过滤器...

    spring security 参考手册中文版

    使用Spring 4.0.x和Gradle 24 2.4.3项目模块 25 核心 - spring-security-core.jar 25 远程处理 - spring-security-remoting.jar 25 Web - spring-security-web.jar 25 配置 - spring-security-config.jar 26 LDAP - ...

    springsecurity

    - `DelegatingFilterProxy`: 用于代理Spring Security的Filter对象。 - `SecurityContextPersistenceFilter`: 保存和恢复用户的Security Context(安全上下文)。 - `UsernamePasswordAuthenticationFilter`: ...

    spring-security-3.1.0.RC3

    每个过滤器都有特定的职责,如`DelegatingFilterProxy`用于委托给Spring Security的其他过滤器,`HttpServletRequestWrapperFilter`用于包装请求以增加安全性。 2. **身份验证(Authentication)**:当用户尝试访问...

    springsecurity框架

    其中,最重要的几个过滤器包括`DelegatingFilterProxy`(用于代理Spring Security的Filter),`AuthenticationProcessingFilter`(负责处理认证请求),`SecurityContextHolderAwareRequestFilter`(增强...

    spring-security-web-3 source code

    同时,通过源码,我们可以更深入地了解Spring Security如何处理CSRF攻击、XSS防护等安全问题,提升Web应用的安全性。 总结,通过对`spring-security-web-3`源码的分析,开发者不仅可以掌握Spring Security的内在...

    spring-security4.0.zip

    Spring Security基于Filter Chain的架构设计,通过定义一系列的过滤器来处理请求,实现用户认证和授权。这些过滤器包括:DelegatingFilterProxy、SecurityContextPersistenceFilter、...

    springsecurity3x快速构建企业级安全

    - **过滤器链(Filter Chain)**:Spring Security的核心是其过滤器链,它由多个预定义的和自定义的过滤器组成,如`DelegatingFilterProxy`、`SecurityContextHolderAwareRequestFilter`等。这些过滤器按顺序执行,...

    SpringSecurity3框架

    `DelegatingFilterProxy`用于将Spring Security的过滤器集成到Servlet容器中。 2. **配置** - **XML配置**:在Spring Security 3中,可以通过XML配置文件来设置安全规则,定义访问控制、认证管理等内容。 - **...

    Spring Security

    1. **Filter Chain**: Spring Security的核心在于其过滤器链,这些过滤器在HTTP请求处理前进行拦截,执行身份验证、授权等操作。主要包括:`DelegatingFilterProxy`、`ChannelProcessingFilter`、`...

    java web整合开发王者归来光盘代码-第六章 过滤器

    - **Spring Filter**:Spring框架提供了多种过滤器,如`DelegatingFilterProxy`,可以代理到Spring的Bean,实现AOP切面过滤。 4. **Spring MVC中的Filter** - **Spring MVC与Filter**:Spring MVC是Spring框架的...

    java过滤器

    在Spring框架中,虽然有更高级的拦截器(Interceptor)机制,但仍然可以使用Servlet Filter。Spring提供了`DelegatingFilterProxy`类,可以将Spring的Bean配置为过滤器,这样可以在Spring的IoC容器中管理过滤器。 ...

    spring-security

    3. **过滤器链(Filter Chain)**:Spring Security的核心是基于Servlet过滤器的过滤器链。这个链包含了多个安全相关的过滤器,如`HttpServletRequestWrapper`、`DelegatingFilterProxy`等,它们负责拦截请求并执行...

    Spring_Security_Fundamentals

    最著名的过滤器是`DelegatingFilterProxy`,它将请求委托给Spring Security的`FilterSecurityInterceptor`。 2. **认证(Authentication)**:认证过程是识别用户身份。Spring Security提供多种认证机制,如基于...

Global site tag (gtag.js) - Google Analytics