From 0ff90bff30ca9cf97372a3ed0124fc067d4f5e55 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 20 Nov 2016 13:26:06 +0800 Subject: [PATCH] sql wall support block statement. --- .../com/alibaba/druid/wall/WallConfig.java | 9 ++++++ .../druid/wall/spi/WallVisitorUtils.java | 4 +++ .../druid/wall/violation/ErrorCode.java | 1 + .../filter/wall/oracle/OracleWallTest7.java | 30 +++++++++++++++++++ 4 files changed, 44 insertions(+) create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/wall/oracle/OracleWallTest7.java diff --git a/src/main/java/com/alibaba/druid/wall/WallConfig.java b/src/main/java/com/alibaba/druid/wall/WallConfig.java index f8c6de0755..145b81cf86 100644 --- a/src/main/java/com/alibaba/druid/wall/WallConfig.java +++ b/src/main/java/com/alibaba/druid/wall/WallConfig.java @@ -45,6 +45,7 @@ public class WallConfig implements WallConfigMBean { private boolean hintAllow = true; private boolean lockTableAllow = true; private boolean startTransactionAllow = true; + private boolean blockAllow = true; private boolean conditionAndAlwayTrueAllow = false; private boolean conditionAndAlwayFalseAllow = false; @@ -789,6 +790,14 @@ public class WallConfig implements WallConfigMBean { this.insertValuesCheckSize = insertValuesCheckSize; } + public boolean isBlockAllow() { + return blockAllow; + } + + public void setBlockAllow(boolean blockAllow) { + this.blockAllow = blockAllow; + } + public void configFromProperties(Properties properties) { { String propertyValue = properties.getProperty("druid.wall.tenantColumn"); diff --git a/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java b/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java index 487307359c..533e026841 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java @@ -2455,6 +2455,10 @@ public class WallVisitorUtils { allow = config.isStartTransactionAllow(); denyMessage = "start transaction not allow"; errorCode = ErrorCode.START_TRANSACTION_NOT_ALLOW; + } else if (x instanceof SQLBlockStatement) { + allow = config.isBlockAllow(); + denyMessage = "block statement not allow"; + errorCode = ErrorCode.BLOCK_NOT_ALLOW; } else { allow = config.isNoneBaseStatementAllow(); errorCode = ErrorCode.NONE_BASE_STATEMENT_NOT_ALLOW; diff --git a/src/main/java/com/alibaba/druid/wall/violation/ErrorCode.java b/src/main/java/com/alibaba/druid/wall/violation/ErrorCode.java index b3e36fc4c6..1286f30781 100644 --- a/src/main/java/com/alibaba/druid/wall/violation/ErrorCode.java +++ b/src/main/java/com/alibaba/druid/wall/violation/ErrorCode.java @@ -34,6 +34,7 @@ public interface ErrorCode { public final static int COMMIT_NOT_ALLOW = 1301; public final static int ROLLBACK_NOT_ALLOW = 1302; public final static int START_TRANSACTION_NOT_ALLOW = 1303; + public final static int BLOCK_NOT_ALLOW = 1304; public final static int SET_NOT_ALLOW = 1200; public final static int DESC_NOT_ALLOW = 1201; diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/oracle/OracleWallTest7.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/oracle/OracleWallTest7.java new file mode 100644 index 0000000000..ee15e6a897 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/oracle/OracleWallTest7.java @@ -0,0 +1,30 @@ +/* + * Copyright 1999-2101 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.filter.wall.oracle; + +import com.alibaba.druid.wall.WallUtils; +import junit.framework.TestCase; +import org.junit.Assert; + +public class OracleWallTest7 extends TestCase { + + public void test_true() throws Exception { + String sql = // + "begin\n" + + "end"; + Assert.assertTrue(WallUtils.isValidateOracle(sql)); + } +}