com.cybermkd.waf.request.WafRequestWrapper Maven / Gradle / Ivy
package com.cybermkd.waf.request;
import com.cybermkd.waf.WafHelper;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.util.HashMap;
import java.util.Map;
/**
* Request请求过滤包装
*
*
* @author hubin
* @Date 2014-5-8
*/
public class WafRequestWrapper extends HttpServletRequestWrapper {
private boolean filterXSS = true;
private boolean filterSQL = true;
public WafRequestWrapper(HttpServletRequest request, boolean filterXSS, boolean filterSQL) {
super(request);
this.filterXSS = filterXSS;
this.filterSQL = filterSQL;
}
public WafRequestWrapper(HttpServletRequest request) {
this(request, true, true);
}
/**
* @param parameter 过滤参数
* @return
* @Description 数组参数过滤
*/
@Override
public String[] getParameterValues(String parameter) {
String[] values = super.getParameterValues(parameter);
if (values == null) {
return null;
}
int count = values.length;
String[] encodedValues = new String[count];
for (int i = 0; i < count; i++) {
encodedValues[i] = filterParamString(values[i]);
}
return encodedValues;
}
@Override
@SuppressWarnings({"rawtypes", "unchecked"})
public Map getParameterMap() {
Map primary = super.getParameterMap();
Map result = new HashMap(primary.size());
for (Map.Entry entry : primary.entrySet()) {
result.put(entry.getKey(), filterEntryString(entry.getValue()));
}
return result;
}
protected String[] filterEntryString(String[] rawValue) {
for (int i = 0; i < rawValue.length; i++) {
rawValue[i] = filterParamString(rawValue[i]);
}
return rawValue;
}
/**
* @param parameter 过滤参数
* @return
* @Description 参数过滤
*/
@Override
public String getParameter(String parameter) {
return filterParamString(super.getParameter(parameter));
}
/**
* @param name 过滤内容
* @return
* @Description 请求头过滤
*/
@Override
public String getHeader(String name) {
return filterParamString(super.getHeader(name));
}
/**
* @return
* @Description Cookie内容过滤
*/
@Override
public Cookie[] getCookies() {
Cookie[] existingCookies = super.getCookies();
if (existingCookies != null) {
for (int i = 0; i < existingCookies.length; ++i) {
Cookie cookie = existingCookies[i];
cookie.setValue(filterParamString(cookie.getValue()));
}
}
return existingCookies;
}
/**
* @param rawValue 待处理内容
* @return
* @Description 过滤字符串内容
*/
protected String filterParamString(String rawValue) {
if (rawValue == null) {
return null;
}
String tmpStr = rawValue;
if (this.filterXSS) {
tmpStr = WafHelper.stripXSS(rawValue);
}
if (this.filterSQL) {
tmpStr = WafHelper.stripSqlInjection(tmpStr);
}
return tmpStr;
}
}