issues/4983 SQL Injection in 3.5.1 #4983

pull/5049/head v3.5.1last
zhangdaiscott 2023-06-04 12:01:15 +08:00
parent 6e85584c43
commit dd7bf104e7
1 changed files with 51 additions and 1 deletions

View File

@ -3,6 +3,8 @@ package org.jeecg.common.util.security;
import lombok.extern.slf4j.Slf4j;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* /
@ -21,6 +23,11 @@ public abstract class AbstractQueryBlackListHandler {
*/
public static Map<String, String> ruleMap = new HashMap<>();
/**
*
*/
public static final Pattern ILLEGAL_NAME_REG = Pattern.compile("[-]{2,}");
static {
ruleMap.put("sys_user", "password,salt");
}
@ -53,7 +60,10 @@ public abstract class AbstractQueryBlackListHandler {
return true;
}
log.info("--获取sql信息--", list.toString());
boolean flag = true;
boolean flag = checkTableAndFieldsName(list);
if(flag == false){
return false;
}
for (QueryTable table : list) {
String name = table.getName();
String fieldString = ruleMap.get(name);
@ -73,6 +83,46 @@ public abstract class AbstractQueryBlackListHandler {
return flag;
}
/**
* sql
* issues/4983 SQL Injection in 3.5.1 #4983
* @return
*/
private boolean checkTableAndFieldsName(List<QueryTable> list){
boolean flag = true;
for(QueryTable queryTable: list){
String tableName = queryTable.getName();
if(hasSpecialString(tableName)){
flag = false;
log.warn("sql黑名单校验表名【"+tableName+"】包含特殊字符");
break;
}
Set<String> fields = queryTable.getFields();
for(String name: fields){
if(hasSpecialString(name)){
flag = false;
log.warn("sql黑名单校验字段名【"+name+"】包含特殊字符");
break;
}
}
}
return flag;
}
/**
*
* @param name
* @return
*/
private boolean hasSpecialString(String name){
Matcher m = ILLEGAL_NAME_REG.matcher(name);
if (m.find()) {
return true;
}
return false;
}
/**
*
*/