parent
0cec24d90b
commit
5a6c977584
|
|
@ -5,6 +5,10 @@ import javax.servlet.http.HttpServletRequestWrapper;
|
||||||
import org.jsoup.Jsoup;
|
import org.jsoup.Jsoup;
|
||||||
import org.jsoup.safety.Whitelist;
|
import org.jsoup.safety.Whitelist;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* XSS过滤处理
|
* XSS过滤处理
|
||||||
*
|
*
|
||||||
|
|
@ -32,9 +36,92 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper
|
||||||
{
|
{
|
||||||
// 防xss攻击和过滤前后空格
|
// 防xss攻击和过滤前后空格
|
||||||
escapseValues[i] = Jsoup.clean(values[i], Whitelist.relaxed()).trim();
|
escapseValues[i] = Jsoup.clean(values[i], Whitelist.relaxed()).trim();
|
||||||
|
//zjj-自定义规则及js脚本注入过滤
|
||||||
|
escapseValues[i] = filterXSS(escapseValues[i]);
|
||||||
}
|
}
|
||||||
return escapseValues;
|
return escapseValues;
|
||||||
}
|
}
|
||||||
return super.getParameterValues(name);
|
return super.getParameterValues(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*@描述 过滤getParameter中xss攻击
|
||||||
|
*@参数 [name]
|
||||||
|
*@返回值 java.lang.String[]
|
||||||
|
*@创建人 zhangjingjing
|
||||||
|
*@创建时间 2019/3/22
|
||||||
|
*@修改人和其它信息
|
||||||
|
*/
|
||||||
|
public String getParameter(String parameter) {
|
||||||
|
String value = super.getParameter(parameter);
|
||||||
|
if (value == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
String result = Jsoup.clean(value, Whitelist.relaxed()).trim();
|
||||||
|
//zjj-自定义规则及js脚本注入过滤
|
||||||
|
result = filterXSS(result);
|
||||||
|
return result;
|
||||||
|
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*@描述 过滤getParameterMap中xss攻击
|
||||||
|
*@参数 [name]
|
||||||
|
*@返回值 java.lang.String[]
|
||||||
|
*@创建人 zhangjingjing
|
||||||
|
*@创建时间 2019/3/22
|
||||||
|
*@修改人和其它信息
|
||||||
|
*/
|
||||||
|
public Map<String, String[]> getParameterMap() {
|
||||||
|
Map properties = super.getParameterMap();
|
||||||
|
Map returnMap = new HashMap();
|
||||||
|
Iterator entries = properties.entrySet().iterator();
|
||||||
|
Map.Entry entry;
|
||||||
|
String name;
|
||||||
|
while (entries.hasNext()) {
|
||||||
|
entry = (Map.Entry) entries.next();
|
||||||
|
name = (String) entry.getKey();
|
||||||
|
Object valueObj = entry.getValue();
|
||||||
|
if(null == valueObj){
|
||||||
|
returnMap.put(name, "");
|
||||||
|
}else if(valueObj instanceof String[]){
|
||||||
|
String[] values = (String[]) valueObj;
|
||||||
|
int length = values.length;
|
||||||
|
String[] escapseValues = new String[length];
|
||||||
|
for (int i = 0; i < length; i++)
|
||||||
|
{
|
||||||
|
// 防xss攻击和过滤前后空格
|
||||||
|
String pValue = values[i];
|
||||||
|
//System.out.println("当前map-xss过滤前参数值:"+pValue);
|
||||||
|
//zjj-jsoup过滤html标签
|
||||||
|
escapseValues[i] = Jsoup.clean(pValue, Whitelist.relaxed()).trim();
|
||||||
|
//zjj-自定义规则及js脚本注入过滤
|
||||||
|
escapseValues[i] = filterXSS(escapseValues[i]);
|
||||||
|
//System.out.println("当前map-xss过滤后参数值:"+escapseValues[i]);
|
||||||
|
}
|
||||||
|
returnMap.put(name, escapseValues);
|
||||||
|
}else{
|
||||||
|
String value = valueObj.toString();
|
||||||
|
if (value == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
String result = Jsoup.clean(value, Whitelist.relaxed()).trim();
|
||||||
|
//zjj-自定义规则及js脚本注入过滤
|
||||||
|
result = filterXSS(result);
|
||||||
|
returnMap.put(name, result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return returnMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private String filterXSS(String value) {
|
||||||
|
value = value.replaceAll("<", "& lt;").replaceAll(">", "& gt;");
|
||||||
|
value = value.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;");
|
||||||
|
value = value.replaceAll("'", "& #39;");
|
||||||
|
value = value.replaceAll("eval\\((.*)\\)", "");
|
||||||
|
value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");
|
||||||
|
value = value.replaceAll("script", "");
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue