This commit is contained in:
温少
2012-03-17 00:30:25 +08:00
parent 3ba8c9926c
commit e5e5a20765
8 changed files with 90 additions and 90 deletions
@@ -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();
@@ -1,5 +1,7 @@
package com.alibaba.druid.filter.wall.spi;
import static com.alibaba.druid.filter.wall.spi.WallVisitorUtils.loadResource;
import com.alibaba.druid.filter.wall.WallConfig;
import com.alibaba.druid.filter.wall.WallProvider;
import com.alibaba.druid.filter.wall.WallVisitor;
@@ -8,7 +10,7 @@ import com.alibaba.druid.sql.parser.SQLStatementParser;
public class MySqlWallProvider extends WallProvider {
public MySqlWallProvider() {
public MySqlWallProvider(){
this(new WallConfig());
}
@@ -29,20 +31,19 @@ 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");
loadResource(config.getPermitNames(), "META-INF/druid-filter-wall-permit-name-mysql.txt");
loadResource(config.getPermitSchemas(), "META-INF/druid-filter-wall-permit-schema-mysql.txt");
loadResource(config.getPermitFunctions(), "META-INF/druid-filter-wall-permit-function-mysql.txt");
loadResource(config.getPermitTables(), "META-INF/druid-filter-wall-permit-table-mysql.txt");
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,
"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");
loadResource(config.getPermitNames(), "META-INF/druid-filter-wall-permit-name-mysql-default.txt");
loadResource(config.getPermitSchemas(), "META-INF/druid-filter-wall-permit-schema-mysql-default.txt");
loadResource(config.getPermitFunctions(), "META-INF/druid-filter-wall-permit-function-mysql-default.txt");
loadResource(config.getPermitTables(), "META-INF/druid-filter-wall-permit-table-mysql-default.txt");
loadResource(config.getPermitObjects(), "META-INF/druid-filter-wall-permit-object-mysql-default.txt");
}
@Override
@@ -52,7 +53,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) {
@@ -1,5 +1,7 @@
package com.alibaba.druid.filter.wall.spi;
import static com.alibaba.druid.filter.wall.spi.WallVisitorUtils.loadResource;
import com.alibaba.druid.filter.wall.WallConfig;
import com.alibaba.druid.filter.wall.WallProvider;
import com.alibaba.druid.filter.wall.WallVisitor;
@@ -29,20 +31,19 @@ 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");
loadResource(config.getPermitNames(), "META-INF/druid-filter-wall-permit-name-oracle.txt");
loadResource(config.getPermitSchemas(), "META-INF/druid-filter-wall-permit-schema-oracle.txt");
loadResource(config.getPermitFunctions(), "META-INF/druid-filter-wall-permit-function-oracle.txt");
loadResource(config.getPermitTables(), "META-INF/druid-filter-wall-permit-table-oracle.txt");
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,
"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");
loadResource(config.getPermitNames(), "META-INF/druid-filter-wall-permit-name-oracle-default.txt");
loadResource(config.getPermitSchemas(), "META-INF/druid-filter-wall-permit-schema-oracle-default.txt");
loadResource(config.getPermitFunctions(), "META-INF/druid-filter-wall-permit-function-oracle-default.txt");
loadResource(config.getPermitTables(), "META-INF/druid-filter-wall-permit-table-oracle-default.txt");
loadResource(config.getPermitObjects(), "META-INF/druid-filter-wall-permit-object-oracle-default.txt");
}
@Override
@@ -52,7 +53,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)));
}
}