最近需要写个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>
分享到:
相关推荐
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/* </filter-mapping...
2. **过滤器链**:Spring Security 的过滤器链开始工作,首先是 `DelegatingFilterProxy`,它将请求转发给 Spring Security 的过滤器链。 3. **匿名身份验证**:如果用户尚未登录,Spring Security 会提供一个匿名...
【Spring Security】是Spring生态体系中的一个安全框架,主要用于企业级应用的安全管理,包括认证、授权、会话管理以及防止XSS、CSRF等安全威胁。它的设计目标是简化应用程序的安全性,使得开发者可以专注于业务逻辑...
`filter`部分定义了一个名为`springSecurityFilterChain`的过滤器,它是Spring Security的核心,由`DelegatingFilterProxy`实现,它委托给Spring应用上下文中定义的安全过滤链。 `filter-mapping`指定了这个过滤器...
使用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 - ...
- `DelegatingFilterProxy`: 用于代理Spring Security的Filter对象。 - `SecurityContextPersistenceFilter`: 保存和恢复用户的Security Context(安全上下文)。 - `UsernamePasswordAuthenticationFilter`: ...
每个过滤器都有特定的职责,如`DelegatingFilterProxy`用于委托给Spring Security的其他过滤器,`HttpServletRequestWrapperFilter`用于包装请求以增加安全性。 2. **身份验证(Authentication)**:当用户尝试访问...
其中,最重要的几个过滤器包括`DelegatingFilterProxy`(用于代理Spring Security的Filter),`AuthenticationProcessingFilter`(负责处理认证请求),`SecurityContextHolderAwareRequestFilter`(增强...
同时,通过源码,我们可以更深入地了解Spring Security如何处理CSRF攻击、XSS防护等安全问题,提升Web应用的安全性。 总结,通过对`spring-security-web-3`源码的分析,开发者不仅可以掌握Spring Security的内在...
Spring Security基于Filter Chain的架构设计,通过定义一系列的过滤器来处理请求,实现用户认证和授权。这些过滤器包括:DelegatingFilterProxy、SecurityContextPersistenceFilter、...
- **过滤器链(Filter Chain)**:Spring Security的核心是其过滤器链,它由多个预定义的和自定义的过滤器组成,如`DelegatingFilterProxy`、`SecurityContextHolderAwareRequestFilter`等。这些过滤器按顺序执行,...
`DelegatingFilterProxy`用于将Spring Security的过滤器集成到Servlet容器中。 2. **配置** - **XML配置**:在Spring Security 3中,可以通过XML配置文件来设置安全规则,定义访问控制、认证管理等内容。 - **...
1. **Filter Chain**: Spring Security的核心在于其过滤器链,这些过滤器在HTTP请求处理前进行拦截,执行身份验证、授权等操作。主要包括:`DelegatingFilterProxy`、`ChannelProcessingFilter`、`...
- **Spring Filter**:Spring框架提供了多种过滤器,如`DelegatingFilterProxy`,可以代理到Spring的Bean,实现AOP切面过滤。 4. **Spring MVC中的Filter** - **Spring MVC与Filter**:Spring MVC是Spring框架的...
在Spring框架中,虽然有更高级的拦截器(Interceptor)机制,但仍然可以使用Servlet Filter。Spring提供了`DelegatingFilterProxy`类,可以将Spring的Bean配置为过滤器,这样可以在Spring的IoC容器中管理过滤器。 ...
3. **过滤器链(Filter Chain)**:Spring Security的核心是基于Servlet过滤器的过滤器链。这个链包含了多个安全相关的过滤器,如`HttpServletRequestWrapper`、`DelegatingFilterProxy`等,它们负责拦截请求并执行...
最著名的过滤器是`DelegatingFilterProxy`,它将请求委托给Spring Security的`FilterSecurityInterceptor`。 2. **认证(Authentication)**:认证过程是识别用户身份。Spring Security提供多种认证机制,如基于...