使用缺省配置的WallFilter

结合其他Filter一起使用

WallFilter可以结合其他Filter一起使用,例如:

  1. ...
  2. <property name="filters" value="wall,stat"/>
  3. </bean>

如果希望StatFilter统计的SQL执行时间内,则使用如下配置

指定dbType

  1. <bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter">
  2. </bean>
  3. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
  4. ...
  5. <list>
  6. <ref bean="wall-filter"/>
  7. </list>
  8. </property>

指定配置装载的目录

缺省情况下,配置装载的目录如下:


从配置目录中以下文件中读取配置:



指定配置装载的目录是可以指定,例如:


  1. <bean id="wall-filter-config" class="com.alibaba.druid.wall.WallConfig" init-method="init">
    <!— 指定配置装载的目录 —>
    <property name="dir" value="META-INF/druid/wall/mysql" />
    </bean>

    <bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter">
    <property name="dbType" value="mysql" />
    <property name="config" ref="wall-filter-config" />
    </bean>

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">

    <property name="proxyFilters">
    <list>
    <ref bean="wall-filter"/>
    </list>
    </property>
    </bean>



# WallConfig详细说明



## 本身的配置


配置项缺省值
dir 按照dbType分别配置: mysql : META-INF/druid/wall/mysql oracle : META-INF/druid/wall/oracle sqlserver : META-INF/druid/wall/sqlserver

如果把selectIntoAllow、deleteAllow、updateAllow、insertAllow、mergeAllow都设置为false,这就是一个只读数据源了。## 拦截配置-永真条件
配置项缺省值描述
selectWhereAlwayTrueChecktrue检查SELECT语句的WHERE子句是否是一个永真条件
selectHavingAlwayTrueChecktrue检查SELECT语句的HAVING子句是否是一个永真条件
deleteWhereAlwayTrueChecktrue检查DELETE语句的WHERE子句是否是一个永真条件
deleteWhereNoneCheckfalse检查DELETE语句是否无where条件,这是有风险的,但不是SQL注入类型的风险
updateWhereAlayTrueChecktrue检查UPDATE语句的WHERE子句是否是一个永真条件
updateWhereNoneCheckfalse检查UPDATE语句是否无where条件,这是有风险的,但不是SQL注入类型的风险
conditionAndAlwayTrueAllowfalse检查查询条件(WHERE/HAVING子句)中是否包含AND永真条件
conditionAndAlwayFalseAllowfalse检查查询条件(WHERE/HAVING子句)中是否包含AND永假条件
conditionLikeTrueAllowtrue检查查询条件(WHERE/HAVING子句)中是否包含LIKE永真条件
配置项缺省值描述
tableChecktrue检测是否使用了禁用的表
schemaChecktrue检测是否使用了禁用的Schema
functionChecktrue检测是否使用了禁用的函数
objectChecktrue检测是否使用了“禁用对对象”
variantChecktrue检测是否使用了“禁用的变量”
readOnlyTables指定的表只读,不能够在SELECT INTO、DELETE、UPDATE、INSERT、MERGE中作为"被修改表"出现<
配置项缺省值描述
logViolationfalse对被认为是攻击的SQL进行LOG.error输出
throwExceptiontrue对被认为是攻击的SQL抛出SQLException
config
provider

刚开始引入WallFilter的时候,把logViolation设置为true,而throwException设置为false。就可以观察是否存在违规的情况,同时不影响业务运行。