mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
refactor
This commit is contained in:
@@ -1,19 +1,28 @@
|
||||
package com.alibaba.druid.filter.wall;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class WallConfig {
|
||||
|
||||
private boolean selelctAllow = true;
|
||||
private boolean selectWhereAlwayTrueCheck = true;
|
||||
private boolean selectHavingAlwayTrueCheck = true;
|
||||
private boolean selelctAllow = true;
|
||||
private boolean selectWhereAlwayTrueCheck = true;
|
||||
private boolean selectHavingAlwayTrueCheck = true;
|
||||
|
||||
private boolean deleteAllow = true;
|
||||
private boolean deleteWhereAlwayTrueCheck = true;
|
||||
private boolean deleteAllow = true;
|
||||
private boolean deleteWhereAlwayTrueCheck = true;
|
||||
|
||||
private boolean updateAllow = true;
|
||||
private boolean updateWhereAlayTrueCheck = true;
|
||||
private boolean updateAllow = true;
|
||||
private boolean updateWhereAlayTrueCheck = true;
|
||||
|
||||
private boolean insertAllow = true;
|
||||
private boolean mergeAllow = true;
|
||||
private boolean insertAllow = true;
|
||||
private boolean mergeAllow = true;
|
||||
|
||||
protected final Set<String> permitFunctions = new HashSet<String>();
|
||||
protected final Set<String> permitTables = new HashSet<String>();
|
||||
protected final Set<String> permitSchemas = new HashSet<String>();
|
||||
protected final Set<String> permitNames = new HashSet<String>();
|
||||
protected final Set<String> permitObjects = new HashSet<String>();
|
||||
|
||||
public boolean isSelelctAllow() {
|
||||
return selelctAllow;
|
||||
@@ -87,4 +96,23 @@ public class WallConfig {
|
||||
this.mergeAllow = mergeAllow;
|
||||
}
|
||||
|
||||
public Set<String> getPermitFunctions() {
|
||||
return permitFunctions;
|
||||
}
|
||||
|
||||
public Set<String> getPermitTables() {
|
||||
return permitTables;
|
||||
}
|
||||
|
||||
public Set<String> getPermitSchemas() {
|
||||
return permitSchemas;
|
||||
}
|
||||
|
||||
public Set<String> getPermitNames() {
|
||||
return permitNames;
|
||||
}
|
||||
|
||||
public Set<String> getPermitObjects() {
|
||||
return permitObjects;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
package com.alibaba.druid.filter.wall;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import com.alibaba.druid.sql.ast.SQLStatement;
|
||||
import com.alibaba.druid.sql.parser.NotAllowCommentException;
|
||||
@@ -20,15 +18,9 @@ public abstract class WallProvider {
|
||||
|
||||
private int whileListMaxSize = 1024;
|
||||
|
||||
private int whiteSqlMaxLength = 1024; // 1k
|
||||
private int whiteSqlMaxLength = 1024; // 1k
|
||||
|
||||
protected final Set<String> permitFunctions = new HashSet<String>();
|
||||
protected final Set<String> permitTables = new HashSet<String>();
|
||||
protected final Set<String> permitSchemas = new HashSet<String>();
|
||||
protected final Set<String> permitNames = new HashSet<String>();
|
||||
protected final Set<String> permitObjects = new HashSet<String>();
|
||||
|
||||
private final WallConfig config;
|
||||
protected final WallConfig config;
|
||||
|
||||
public WallProvider(WallConfig config){
|
||||
this.config = config;
|
||||
@@ -117,24 +109,4 @@ public abstract class WallProvider {
|
||||
return true;
|
||||
}
|
||||
|
||||
public Set<String> getPermitFunctions() {
|
||||
return permitFunctions;
|
||||
}
|
||||
|
||||
public Set<String> getPermitTables() {
|
||||
return permitTables;
|
||||
}
|
||||
|
||||
public Set<String> getPermitSchemas() {
|
||||
return permitSchemas;
|
||||
}
|
||||
|
||||
public Set<String> getPermitNames() {
|
||||
return permitNames;
|
||||
}
|
||||
|
||||
public Set<String> getPermitObjects() {
|
||||
return permitObjects;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor;
|
||||
|
||||
public interface WallVisitor extends SQLASTVisitor {
|
||||
|
||||
WallProvider getProvider();
|
||||
WallConfig getConfig();
|
||||
|
||||
List<Violation> getViolations();
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ import com.alibaba.druid.sql.parser.SQLStatementParser;
|
||||
|
||||
public class MySqlWallProvider extends WallProvider {
|
||||
|
||||
public MySqlWallProvider() {
|
||||
public MySqlWallProvider(){
|
||||
this(new WallConfig());
|
||||
}
|
||||
|
||||
@@ -29,20 +29,25 @@ public class MySqlWallProvider extends WallProvider {
|
||||
}
|
||||
|
||||
public void loadExtend() {
|
||||
WallVisitorUtils.loadResource(this.permitNames, "META-INF/druid-filter-wall-permit-name-mysql.txt");
|
||||
WallVisitorUtils.loadResource(this.permitSchemas, "META-INF/druid-filter-wall-permit-schema-mysql.txt");
|
||||
WallVisitorUtils.loadResource(this.permitFunctions, "META-INF/druid-filter-wall-permit-function-mysql.txt");
|
||||
WallVisitorUtils.loadResource(this.permitTables, "META-INF/druid-filter-wall-permit-table-mysql.txt");
|
||||
WallVisitorUtils.loadResource(this.permitObjects, "META-INF/druid-filter-wall-permit-object-mysql.txt");
|
||||
WallVisitorUtils.loadResource(config.getPermitNames(), "META-INF/druid-filter-wall-permit-name-mysql.txt");
|
||||
WallVisitorUtils.loadResource(config.getPermitSchemas(), "META-INF/druid-filter-wall-permit-schema-mysql.txt");
|
||||
WallVisitorUtils.loadResource(config.getPermitFunctions(),
|
||||
"META-INF/druid-filter-wall-permit-function-mysql.txt");
|
||||
WallVisitorUtils.loadResource(config.getPermitTables(), "META-INF/druid-filter-wall-permit-table-mysql.txt");
|
||||
WallVisitorUtils.loadResource(config.getPermitObjects(), "META-INF/druid-filter-wall-permit-object-mysql.txt");
|
||||
}
|
||||
|
||||
public void loadDefault() {
|
||||
WallVisitorUtils.loadResource(this.permitNames, "META-INF/druid-filter-wall-permit-name-mysql-default.txt");
|
||||
WallVisitorUtils.loadResource(this.permitSchemas, "META-INF/druid-filter-wall-permit-schema-mysql-default.txt");
|
||||
WallVisitorUtils.loadResource(this.permitFunctions,
|
||||
WallVisitorUtils.loadResource(config.getPermitNames(),
|
||||
"META-INF/druid-filter-wall-permit-name-mysql-default.txt");
|
||||
WallVisitorUtils.loadResource(config.getPermitSchemas(),
|
||||
"META-INF/druid-filter-wall-permit-schema-mysql-default.txt");
|
||||
WallVisitorUtils.loadResource(config.getPermitFunctions(),
|
||||
"META-INF/druid-filter-wall-permit-function-mysql-default.txt");
|
||||
WallVisitorUtils.loadResource(this.permitTables, "META-INF/druid-filter-wall-permit-table-mysql-default.txt");
|
||||
WallVisitorUtils.loadResource(this.permitObjects, "META-INF/druid-filter-wall-permit-object-mysql-default.txt");
|
||||
WallVisitorUtils.loadResource(config.getPermitTables(),
|
||||
"META-INF/druid-filter-wall-permit-table-mysql-default.txt");
|
||||
WallVisitorUtils.loadResource(config.getPermitObjects(),
|
||||
"META-INF/druid-filter-wall-permit-object-mysql-default.txt");
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -52,7 +57,7 @@ public class MySqlWallProvider extends WallProvider {
|
||||
|
||||
@Override
|
||||
public WallVisitor createWallVisitor() {
|
||||
return new MySqlWallVisitor(this);
|
||||
return new MySqlWallVisitor(config);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import java.util.List;
|
||||
|
||||
import com.alibaba.druid.filter.wall.IllegalSQLObjectViolation;
|
||||
import com.alibaba.druid.filter.wall.Violation;
|
||||
import com.alibaba.druid.filter.wall.WallProvider;
|
||||
import com.alibaba.druid.filter.wall.WallConfig;
|
||||
import com.alibaba.druid.filter.wall.WallVisitor;
|
||||
import com.alibaba.druid.sql.SQLUtils;
|
||||
import com.alibaba.druid.sql.ast.SQLName;
|
||||
@@ -34,20 +34,20 @@ import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitorAdapter;
|
||||
|
||||
public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisitor, MySqlASTVisitor {
|
||||
|
||||
private final MySqlWallProvider provider;
|
||||
private final List<Violation> violations = new ArrayList<Violation>();
|
||||
private final WallConfig config;
|
||||
private final List<Violation> violations = new ArrayList<Violation>();
|
||||
|
||||
public MySqlWallVisitor(MySqlWallProvider provider){
|
||||
this.provider = provider;
|
||||
public MySqlWallVisitor(WallConfig config){
|
||||
this.config = config;
|
||||
}
|
||||
|
||||
public WallProvider getProvider() {
|
||||
return provider;
|
||||
public WallConfig getConfig() {
|
||||
return config;
|
||||
}
|
||||
|
||||
public boolean containsPermitObjects(String name) {
|
||||
name = name.toLowerCase();
|
||||
return provider.getPermitObjects().contains(name);
|
||||
return config.getPermitObjects().contains(name);
|
||||
}
|
||||
|
||||
public List<Violation> getViolations() {
|
||||
@@ -168,7 +168,7 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi
|
||||
@Override
|
||||
public boolean containsPermitTable(String name) {
|
||||
name = WallVisitorUtils.form(name);
|
||||
return provider.getPermitTables().contains(name);
|
||||
return config.getPermitTables().contains(name);
|
||||
}
|
||||
|
||||
public void preVisit(SQLObject x) {
|
||||
|
||||
@@ -29,20 +29,25 @@ public class OracleWallProvider extends WallProvider {
|
||||
}
|
||||
|
||||
public void loadExtend() {
|
||||
WallVisitorUtils.loadResource(this.permitNames, "META-INF/druid-filter-wall-permit-name-oracle.txt");
|
||||
WallVisitorUtils.loadResource(this.permitSchemas, "META-INF/druid-filter-wall-permit-schema-oracle.txt");
|
||||
WallVisitorUtils.loadResource(this.permitFunctions, "META-INF/druid-filter-wall-permit-function-oracle.txt");
|
||||
WallVisitorUtils.loadResource(this.permitTables, "META-INF/druid-filter-wall-permit-table-oracle.txt");
|
||||
WallVisitorUtils.loadResource(this.permitObjects, "META-INF/druid-filter-wall-permit-object-oracle.txt");
|
||||
WallVisitorUtils.loadResource(config.getPermitNames(), "META-INF/druid-filter-wall-permit-name-oracle.txt");
|
||||
WallVisitorUtils.loadResource(config.getPermitSchemas(), "META-INF/druid-filter-wall-permit-schema-oracle.txt");
|
||||
WallVisitorUtils.loadResource(config.getPermitFunctions(),
|
||||
"META-INF/druid-filter-wall-permit-function-oracle.txt");
|
||||
WallVisitorUtils.loadResource(config.getPermitTables(), "META-INF/druid-filter-wall-permit-table-oracle.txt");
|
||||
WallVisitorUtils.loadResource(config.getPermitObjects(), "META-INF/druid-filter-wall-permit-object-oracle.txt");
|
||||
}
|
||||
|
||||
public void loadDefault() {
|
||||
WallVisitorUtils.loadResource(this.permitNames, "META-INF/druid-filter-wall-permit-name-oracle-default.txt");
|
||||
WallVisitorUtils.loadResource(this.permitSchemas, "META-INF/druid-filter-wall-permit-schema-oracle-default.txt");
|
||||
WallVisitorUtils.loadResource(this.permitFunctions,
|
||||
WallVisitorUtils.loadResource(config.getPermitNames(),
|
||||
"META-INF/druid-filter-wall-permit-name-oracle-default.txt");
|
||||
WallVisitorUtils.loadResource(config.getPermitSchemas(),
|
||||
"META-INF/druid-filter-wall-permit-schema-oracle-default.txt");
|
||||
WallVisitorUtils.loadResource(config.getPermitFunctions(),
|
||||
"META-INF/druid-filter-wall-permit-function-oracle-default.txt");
|
||||
WallVisitorUtils.loadResource(this.permitTables, "META-INF/druid-filter-wall-permit-table-oracle-default.txt");
|
||||
WallVisitorUtils.loadResource(this.permitObjects, "META-INF/druid-filter-wall-permit-object-oracle-default.txt");
|
||||
WallVisitorUtils.loadResource(config.getPermitTables(),
|
||||
"META-INF/druid-filter-wall-permit-table-oracle-default.txt");
|
||||
WallVisitorUtils.loadResource(config.getPermitObjects(),
|
||||
"META-INF/druid-filter-wall-permit-object-oracle-default.txt");
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -52,7 +57,7 @@ public class OracleWallProvider extends WallProvider {
|
||||
|
||||
@Override
|
||||
public WallVisitor createWallVisitor() {
|
||||
return new OracleWallVisitor(this);
|
||||
return new OracleWallVisitor(config);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import java.util.List;
|
||||
|
||||
import com.alibaba.druid.filter.wall.IllegalSQLObjectViolation;
|
||||
import com.alibaba.druid.filter.wall.Violation;
|
||||
import com.alibaba.druid.filter.wall.WallProvider;
|
||||
import com.alibaba.druid.filter.wall.WallConfig;
|
||||
import com.alibaba.druid.filter.wall.WallVisitor;
|
||||
import com.alibaba.druid.sql.SQLUtils;
|
||||
import com.alibaba.druid.sql.ast.SQLName;
|
||||
@@ -34,16 +34,15 @@ import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVIsitorAdapter;
|
||||
|
||||
public class OracleWallVisitor extends OracleASTVIsitorAdapter implements WallVisitor {
|
||||
|
||||
private OracleWallProvider provider;
|
||||
private final WallConfig config;
|
||||
private final List<Violation> violations = new ArrayList<Violation>();
|
||||
|
||||
public OracleWallVisitor(OracleWallProvider provider){
|
||||
this.provider = provider;
|
||||
public OracleWallVisitor(WallConfig config){
|
||||
this.config = config;
|
||||
}
|
||||
|
||||
public boolean containsPermitObjects(String name) {
|
||||
name = name.toLowerCase();
|
||||
return provider.getPermitObjects().contains(name);
|
||||
public WallConfig getConfig() {
|
||||
return config;
|
||||
}
|
||||
|
||||
public List<Violation> getViolations() {
|
||||
@@ -107,7 +106,7 @@ public class OracleWallVisitor extends OracleASTVIsitorAdapter implements WallVi
|
||||
@Override
|
||||
public boolean visit(OracleSelectQueryBlock x) {
|
||||
WallVisitorUtils.checkSelelctCondition(this, x.getWhere());
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -155,7 +154,7 @@ public class OracleWallVisitor extends OracleASTVIsitorAdapter implements WallVi
|
||||
if (name.startsWith("v$") || name.startsWith("v_$")) {
|
||||
return true;
|
||||
}
|
||||
return provider.getPermitTables().contains(name);
|
||||
return config.getPermitTables().contains(name);
|
||||
}
|
||||
|
||||
public void preVisit(SQLObject x) {
|
||||
@@ -179,7 +178,8 @@ public class OracleWallVisitor extends OracleASTVIsitorAdapter implements WallVi
|
||||
}
|
||||
|
||||
@Override
|
||||
public WallProvider getProvider() {
|
||||
return this.provider;
|
||||
public boolean containsPermitObjects(String name) {
|
||||
return config.getPermitObjects().contains(name);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@ import java.util.Enumeration;
|
||||
import java.util.Set;
|
||||
|
||||
import com.alibaba.druid.filter.wall.IllegalSQLObjectViolation;
|
||||
import com.alibaba.druid.filter.wall.WallProvider;
|
||||
import com.alibaba.druid.filter.wall.WallVisitor;
|
||||
import com.alibaba.druid.logging.Log;
|
||||
import com.alibaba.druid.logging.LogFactory;
|
||||
@@ -59,8 +58,7 @@ public class WallVisitorUtils {
|
||||
return;
|
||||
}
|
||||
|
||||
WallProvider provider = visitor.getProvider();
|
||||
if (!provider.getConfig().isSelectHavingAlwayTrueCheck()) {
|
||||
if (!visitor.getConfig().isSelectHavingAlwayTrueCheck()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -368,7 +366,7 @@ public class WallVisitorUtils {
|
||||
|
||||
String methodName = x.getMethodName();
|
||||
|
||||
if (visitor.getProvider().getPermitFunctions().contains(methodName.toLowerCase())) {
|
||||
if (visitor.getConfig().getPermitFunctions().contains(methodName.toLowerCase())) {
|
||||
visitor.getViolations().add(new IllegalSQLObjectViolation(visitor.toSQL(x)));
|
||||
}
|
||||
|
||||
@@ -386,7 +384,7 @@ public class WallVisitorUtils {
|
||||
|
||||
ownerName = form(ownerName);
|
||||
|
||||
if (visitor.getProvider().getPermitSchemas().contains(ownerName.toLowerCase())) {
|
||||
if (visitor.getConfig().getPermitSchemas().contains(ownerName.toLowerCase())) {
|
||||
visitor.getViolations().add(new IllegalSQLObjectViolation(visitor.toSQL(x)));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user