diff --git a/src/main/java/com/alibaba/druid/filter/wall/WallConfig.java b/src/main/java/com/alibaba/druid/filter/wall/WallConfig.java index 8981e74019..af3adbf9eb 100644 --- a/src/main/java/com/alibaba/druid/filter/wall/WallConfig.java +++ b/src/main/java/com/alibaba/druid/filter/wall/WallConfig.java @@ -5,6 +5,8 @@ import static com.alibaba.druid.filter.wall.spi.WallVisitorUtils.loadResource; import java.util.HashSet; import java.util.Set; +import com.alibaba.druid.filter.wall.spi.WallVisitorUtils; + public class WallConfig { private boolean selelctAllow = true; @@ -170,4 +172,9 @@ public class WallConfig { public Set getPermitObjects() { return permitObjects; } + + public boolean containsPermitSchema(String name) { + name = WallVisitorUtils.form(name); + return this.permitSchemas.contains(name); + } } diff --git a/src/main/java/com/alibaba/druid/filter/wall/WallVisitor.java b/src/main/java/com/alibaba/druid/filter/wall/WallVisitor.java index c71a9e0988..718fd228a4 100644 --- a/src/main/java/com/alibaba/druid/filter/wall/WallVisitor.java +++ b/src/main/java/com/alibaba/druid/filter/wall/WallVisitor.java @@ -10,7 +10,7 @@ public interface WallVisitor extends SQLASTVisitor { WallConfig getConfig(); List getViolations(); - + boolean containsPermitTable(String name); boolean containsPermitObjects(String name); 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 e3ed6ece75..1589aa7e77 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 @@ -165,7 +165,7 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi @Override public boolean visit(SQLMethodInvokeExpr x) { - WallVisitorUtils.check(this, x); + WallVisitorUtils.checkFunction(this, x); return true; } @@ -202,6 +202,10 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi @Override public boolean containsPermitTable(String name) { + if (!config.isTableCheck()) { + return false; + } + name = WallVisitorUtils.form(name); return config.getPermitTables().contains(name); } 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 9f5d2a9f8a..3a01a747b7 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 @@ -72,7 +72,7 @@ public class OracleWallVisitor extends OracleASTVIsitorAdapter implements WallVi @Override public boolean visit(SQLMethodInvokeExpr x) { - WallVisitorUtils.check(this, x); + WallVisitorUtils.checkFunction(this, x); return true; } @@ -127,6 +127,10 @@ public class OracleWallVisitor extends OracleASTVIsitorAdapter implements WallVi @Override public boolean containsPermitTable(String name) { + if (!config.isTableCheck()) { + return false; + } + name = WallVisitorUtils.form(name); if (name.startsWith("v$") || name.startsWith("v_$")) { return true; diff --git a/src/main/java/com/alibaba/druid/filter/wall/spi/WallVisitorUtils.java b/src/main/java/com/alibaba/druid/filter/wall/spi/WallVisitorUtils.java index f383f26cdc..f8a9befa47 100644 --- a/src/main/java/com/alibaba/druid/filter/wall/spi/WallVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/filter/wall/spi/WallVisitorUtils.java @@ -387,7 +387,7 @@ public class WallVisitorUtils { return false; } - public static void check(WallVisitor visitor, SQLMethodInvokeExpr x) { + public static void checkFunction(WallVisitor visitor, SQLMethodInvokeExpr x) { if (x.getOwner() instanceof SQLIdentifierExpr) { String owner = x.getOwner().toString(); owner = WallVisitorUtils.form(owner); @@ -395,7 +395,11 @@ public class WallVisitorUtils { visitor.getViolations().add(new IllegalSQLObjectViolation(visitor.toSQL(x))); } } - + + if (!visitor.getConfig().isFunctionCheck()) { + return; + } + String methodName = x.getMethodName(); if (visitor.getConfig().getPermitFunctions().contains(methodName.toLowerCase())) {