开发时间 2016-03-02日
项目地点:深圳
开发人员 yekang
在web.xml中配置过滤器
<!-- <filter>
<filter-name>XSSFilter</filter-name>
<filter-class> com.palic.elis.ceis.common.filter.XssFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>XSSFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> -->
创建类
package com.palic.elis.ceis.common.filter;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;
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;
public class XssFilter implements Filter {
// XSS处理Map
private static Map<String, String> xssMap = new LinkedHashMap<String, String>();
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// 强制类型转换 HttpServletRequest
HttpServletRequest httpReq = (HttpServletRequest) request;
// 构造HttpRequestWrapper对象处理XSS
HttpRequestWrapper httpReqWarp = new HttpRequestWrapper(httpReq, xssMap);
//
chain.doFilter(httpReqWarp, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 含有脚本: script
xssMap.put("[s|S][c|C][r|R][i|I][p|P][t|T]", "");
// 含有脚本 javascript
xssMap.put(
"[\\\"\\\'][\\s]*[j|J][a|A][v|V][a|A][s|S][c|C][r|R][i|I][p|P][t|T]:(.*)[\\\"\\\']",
"\"\"");
// 含有函数: eval
xssMap.put("[e|E][v|V][a|A][l|L]\\((.*)\\)", "");
// 含有符号 <
xssMap.put("<", "<");
// 含有符号 >
xssMap.put(">", ">");
// 含有符号 (
xssMap.put("\\(", "(");
System.out.println("1111111111111");
// 含有符号 )
xssMap.put("\\)", ")");
// 含有符号 '
xssMap.put("'", "'");
// 含有符号 "
xssMap.put("\"", "\"");
System.out.println("22222222222222");
}
}
创建类
package com.palic.elis.ceis.common.filter;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class HttpRequestWrapper extends HttpServletRequestWrapper {
private Map<String, String> xssMap;
public HttpRequestWrapper(HttpServletRequest Request) {
super(Request);
}
public HttpRequestWrapper(HttpServletRequest request,
Map<String, String> xssMap) {
super(request);
this.xssMap = xssMap;
}
@Override
public String[] getParameterValues(String parameter) {
String[] values = super.getParameterValues(parameter);
if (values == null||values.length == 0) {
return null;
}
// 遍历每一个参数,检查是否含有
for (int i = 0; i < values.length; i++) {
values[i] = cleanXSS(values[i]);
}
return values;
}
public String getParameter(String parameter) {
String value = super.getParameter(parameter);
if (value == null) {
return null;
}
return cleanXSS(value);
}
public String getHeader(String name) {
String value = super.getHeader(name);
if (value == null)
return null;
return cleanXSS(value);
}
private String cleanXSS(String value) {
Set<String> keySet = xssMap.keySet();
for (String key : keySet) {
String v = xssMap.get(key);
value = value.replaceAll(key, v);
}
return value;
}
}