|
@ -120,10 +120,16 @@ public class BasicZuulFilter extends ZuulFilter {
|
|
|
logger.info("入参"+ctx.getRequestQueryParams());
|
|
|
try {
|
|
|
decrypt(ctx,request);
|
|
|
logger.info("1111111111111111222222222222222222");
|
|
|
logger.info("第一步");
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
//防止SQL注入过滤器
|
|
|
if(doSqlFilterCtx(ctx)){
|
|
|
logger.info("1111111111111111");
|
|
|
return this.forbidden(ctx, ResultStatus.ERROR_PARA, "Illegal parameter");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//保存操作日志
|
|
@ -364,6 +370,21 @@ public class BasicZuulFilter extends ZuulFilter {
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
|
|
|
public boolean doSqlFilterCtx(RequestContext ctx){
|
|
|
Map<String, List<String>> map = ctx.getRequestQueryParams();
|
|
|
String sql = "";
|
|
|
if (map!=null&&map.size()!=0){
|
|
|
for (Map.Entry<String,List<String>> entry:map.entrySet()) {
|
|
|
sql = sql + entry.getValue();
|
|
|
}
|
|
|
if (sqlValidate(sql)) {
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
public boolean doSqlFilterParams(HttpServletRequest request){
|
|
|
Enumeration params = request.getParameterNames();
|
|
|
String sql = "";
|
|
@ -403,14 +424,16 @@ public class BasicZuulFilter extends ZuulFilter {
|
|
|
|
|
|
private static boolean sqlValidate(String str) {
|
|
|
if (org.apache.commons.lang3.StringUtils.isNoneBlank(str)){
|
|
|
logger.info("sql"+str);
|
|
|
str = str.toLowerCase();//统一转为小写,比较简单的单词加入右边空格,避免单词中包含字段
|
|
|
String badStr = "and |exec |execute |insert |select |delete |update |drop |chr |mid |master |truncate |" +
|
|
|
String badStr = "xor|sysdate|and |exec |execute |insert |select |delete |update |drop |chr |mid |master |truncate |" +
|
|
|
"declare | sitename |net user|xp_cmdshell|or |exec |execute |create |" +
|
|
|
"table |from |grant |use |group_concat|column_name|" +
|
|
|
"information_schema.columns|table_schema|union |where |select |update |order |by |like |" ;//过滤掉的sql关键字,可以手动添加
|
|
|
String[] badStrs = badStr.split("\\|");
|
|
|
for (int i = 0; i < badStrs.length; i++) {
|
|
|
if (str.indexOf(badStrs[i]) >= 0) {
|
|
|
logger.info("true");
|
|
|
return true;
|
|
|
}
|
|
|
}
|