diff --git a/src/main/java/com/alibaba/druid/filter/wall/spi/MySqlWallVisitor.java b/src/main/java/com/alibaba/druid/filter/wall/spi/MySqlWallVisitor.java index 03fa1a2a47..aab130a4d4 100644 --- a/src/main/java/com/alibaba/druid/filter/wall/spi/MySqlWallVisitor.java +++ b/src/main/java/com/alibaba/druid/filter/wall/spi/MySqlWallVisitor.java @@ -38,37 +38,35 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi private final Set permitFunctions = new HashSet(); private final Set permitTables = new HashSet(); private final Set permitSchemas = new HashSet(); - private final Set permiNames = new HashSet(); + private final Set permitNames = new HashSet(); private final Set permitObjects = new HashSet(); private final List violations; public MySqlWallVisitor(){ - this(new ArrayList()); + this(new ArrayList(), true); + } + + public MySqlWallVisitor(boolean loadDefault) { + this(new ArrayList(), loadDefault); } - public MySqlWallVisitor(List violations){ + public MySqlWallVisitor(List violations, boolean loadDefault){ this.violations = violations; - permitFunctions.add("version"); - permitFunctions.add("load_file"); - permitFunctions.add("databse"); - permitFunctions.add("schema"); - permitFunctions.add("user"); - permitFunctions.add("system_user"); - permitFunctions.add("session_user"); - permitFunctions.add("benchmark"); - permitFunctions.add("connection_id"); - permitFunctions.add("current_user"); + loadDefault(); + } - permitSchemas.add("information_schema"); - permitSchemas.add("mysql"); - - permitTables.add("outfile"); + public void loadDefault() { + 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"); } public Set getPermitNames() { - return permiNames; + return permitNames; } public Set getPermitFunctions() { @@ -116,7 +114,7 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi WallVisitorUtils.checkCondition(this, x.getHaving()); return true; } - + public boolean visit(MySqlSelectGroupBy x) { WallVisitorUtils.checkCondition(this, x.getHaving()); return true; @@ -127,26 +125,25 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi WallVisitorUtils.checkCondition(this, x.getWhere()); return true; } - + @Override public boolean visit(MySqlDeleteStatement x) { WallVisitorUtils.checkCondition(this, x.getWhere()); return true; } - - + @Override public boolean visit(SQLDeleteStatement x) { WallVisitorUtils.checkCondition(this, x.getWhere()); return true; } - + @Override public boolean visit(SQLUpdateStatement x) { WallVisitorUtils.checkCondition(this, x.getWhere()); return true; } - + @Override public boolean visit(Limit x) { if (x.getRowCount() instanceof SQLNumericLiteralExpr) { diff --git a/src/main/java/com/alibaba/druid/filter/wall/spi/OracleWallVisitor.java b/src/main/java/com/alibaba/druid/filter/wall/spi/OracleWallVisitor.java index 28933f69b0..1dbcb8c3df 100644 --- a/src/main/java/com/alibaba/druid/filter/wall/spi/OracleWallVisitor.java +++ b/src/main/java/com/alibaba/druid/filter/wall/spi/OracleWallVisitor.java @@ -44,12 +44,20 @@ public class OracleWallVisitor extends OracleASTVIsitorAdapter implements WallVi private final List violations; public OracleWallVisitor(){ - this(new ArrayList()); + this(new ArrayList(), true); + } + + public OracleWallVisitor(boolean loadDefault) { + this(new ArrayList(), loadDefault); } - public OracleWallVisitor(List violations){ + public OracleWallVisitor(List violations, boolean loadDefault){ this.violations = violations; + loadDefault(); + } + + public void loadDefault() { 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"); @@ -180,13 +188,13 @@ public class OracleWallVisitor extends OracleASTVIsitorAdapter implements WallVi WallVisitorUtils.checkCondition(this, x.getWhere()); return true; } - + @Override public boolean visit(SQLUpdateStatement x) { WallVisitorUtils.checkCondition(this, x.getWhere()); return true; } - + @Override public boolean visit(OracleUpdateStatement x) { WallVisitorUtils.checkCondition(this, x.getWhere()); diff --git a/src/main/resources/META-INF/druid-filter-wall-permit-function-mysql.txt b/src/main/resources/META-INF/druid-filter-wall-permit-function-mysql.txt new file mode 100644 index 0000000000..9ef6d33276 --- /dev/null +++ b/src/main/resources/META-INF/druid-filter-wall-permit-function-mysql.txt @@ -0,0 +1,10 @@ +version +load_file +databse +schema +user +system_user +session_user +benchmark +connection_id +current_user \ No newline at end of file diff --git a/src/main/resources/META-INF/druid-filter-wall-permit-schema-mysql.txt b/src/main/resources/META-INF/druid-filter-wall-permit-schema-mysql.txt new file mode 100644 index 0000000000..699d511d05 --- /dev/null +++ b/src/main/resources/META-INF/druid-filter-wall-permit-schema-mysql.txt @@ -0,0 +1,2 @@ +information_schema +mysql \ No newline at end of file