improve WallFilter, support minusAllow

This commit is contained in:
wenshao
2013-03-19 01:25:59 +08:00
parent 19b24d8022
commit f1e6e0d937
3 changed files with 42 additions and 4 deletions
@@ -44,6 +44,7 @@ public class WallConfig implements WallConfigMBean {
private boolean insertAllow = true;
private boolean mergeAllow = true;
private boolean minusAllow = false;
private boolean multiStatementAllow = false;
@@ -89,6 +90,14 @@ public class WallConfig implements WallConfigMBean {
public WallConfig(){
}
public boolean isMinusAllow() {
return minusAllow;
}
public void setMinusAllow(boolean minusAllow) {
this.minusAllow = minusAllow;
}
public boolean isConditionOpXorAllow() {
return conditionOpXorAllow;
@@ -97,11 +106,11 @@ public class WallConfig implements WallConfigMBean {
public void setConditionOpXorAllow(boolean conditionOpXorAllow) {
this.conditionOpXorAllow = conditionOpXorAllow;
}
public boolean isConditionOpBitwseAllow() {
return conditionOpBitwseAllow;
}
public void setConditionOpBitwseAllow(boolean conditionOpBitwseAllow) {
this.conditionOpBitwseAllow = conditionOpBitwseAllow;
}
@@ -54,6 +54,7 @@ import com.alibaba.druid.sql.ast.statement.SQLSelectQuery;
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
import com.alibaba.druid.sql.ast.statement.SQLSubqueryTableSource;
import com.alibaba.druid.sql.ast.statement.SQLTableSource;
import com.alibaba.druid.sql.ast.statement.SQLUnionOperator;
import com.alibaba.druid.sql.ast.statement.SQLUnionQuery;
import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBooleanExpr;
@@ -498,7 +499,7 @@ public class WallVisitorUtils {
public void setXor(boolean xor) {
this.xor = xor;
}
public boolean hasBitwise() {
return bitwise;
}
@@ -532,7 +533,7 @@ public class WallVisitorUtils {
if (current.hasXor() && !visitor.getConfig().isConditionOpXorAllow()) {
addViolation(visitor, x);
}
if (current.hasBitwise() && !visitor.getConfig().isConditionOpBitwseAllow()) {
addViolation(visitor, x);
}
@@ -747,6 +748,11 @@ public class WallVisitorUtils {
}
public static void checkUnion(WallVisitor visitor, SQLUnionQuery x) {
if (x.getOperator() == SQLUnionOperator.MINUS && !visitor.getConfig().isMinusAllow()) {
addViolation(visitor, x);
return;
}
if (!visitor.getConfig().isSelectUnionCheck()) {
return;
}