Druid 配置 wallfilter

这个文档提供基于Spring的各种配置方式

使用缺省配置的WallFilter

  <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
      ...
      <property name="filters" value="wall"/>
  </bean>

结合其他Filter一起使用

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

  <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
      ...
      <property name="filters" value="wall,stat"/>
  </bean>

这样,拦截检测的时间不在StatFilter统计的SQL执行时间内。

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

  <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
      ...
      <property name="filters" value="stat,wall"/>
  </bean>

指定dbType

有时候,一些应用框架做了自己的JDBC Proxy Driver,是的DruidDataSource无法正确识别数据库的类型,则需要特别指定,如下:

  <bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter">
      <property name="dbType" value="mysql" />
  </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>

指定配置装载的目录

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

数据库类型目录
mysqlMETA-INF/druid/wall/mysql
oracleMETA-INF/druid/wall/oracle
sqlserverMETA-INF/druid/wall/sqlserver
postgresMETA-INF/druid/wall/postgres

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

  deny-variant.txt
  deny-schema.txt
  deny-function.txt
  deny-table.txt
  deny-object.txt

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

  <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 

拦截配置-语句

配置项缺省值描述
selelctAllowtrue是否允许执行SELECT语句
selectAllColumnAllowtrue是否允许执行SELECT * FROM T这样的语句。如果设置为false,不允许执行select * from t,但select * from (select id, name from t) a。这个选项是防御程序通过调用select *获得数据表的结构信息。
selectIntoAllowtrueSELECT查询中是否允许INTO字句
deleteAllowtrue是否允许执行DELETE语句
updateAllowtrue是否允许执行UPDATE语句
insertAllowtrue是否允许执行INSERT语句
replaceAllowtrue是否允许执行REPLACE语句
mergeAllowtrue是否允许执行MERGE语句,这个只在Oracle中有用
callAllowtrue是否允许通过jdbc的call语法调用存储过程
setAllowtrue是否允许使用SET语法
truncateAllowtruetruncate语句是危险,缺省打开,若需要自行关闭
createTableAllowtrue是否允许创建表
alterTableAllowtrue是否允许执行Alter Table语句
dropTableAllowtrue是否允许修改表
commentAllowfalse是否允许语句中存在注释,Oracle的用户不用担心,Wall能够识别hints和注释的区别
noneBaseStatementAllowfalse是否允许非以上基本语句的其他语句,缺省关闭,通过这个选项就能够屏蔽DDL。
multiStatementAllowfalse是否允许一次执行多条语句,缺省关闭
useAllowtrue是否允许执行mysql的use语句,缺省打开
describeAllowtrue是否允许执行mysql的describe语句,缺省打开
showAllowtrue是否允许执行mysql的show语句,缺省打开
commitAllowtrue是否允许执行commit操作
rollbackAllowtrue是否允许执行roll back操作

如果把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永真条件

其他拦截配置

配置项缺省值描述
selectIntoOutfileAllowfalseSELECT ... INTO OUTFILE 是否允许,这个是mysql注入攻击的常见手段,缺省是禁止的
selectUnionChecktrue检测SELECT UNION
selectMinusChecktrue检测SELECT MINUS
selectExceptChecktrue检测SELECT EXCEPT
selectIntersectChecktrue检测SELECT INTERSECT
mustParameterizedfalse是否必须参数化,如果为True,则不允许类似WHERE ID = 1这种不参数化的SQL
strictSyntaxChecktrue是否进行严格的语法检测,Druid SQL Parser在某些场景不能覆盖所有的SQL语法,出现解析SQL出错,可以临时把这个选项设置为false,同时把SQL反馈给Druid的开发者。
conditionOpXorAllowfalse查询条件中是否允许有XOR条件。XOR不常用,很难判断永真或者永假,缺省不允许。
conditionOpBitwseAllowtrue查询条件中是否允许有"&"、"~"、"|"、"^"运算符。
conditionDoubleConstAllowfalse查询条件中是否允许连续两个常量运算表达式
minusAllowtrue是否允许SELECT * FROM A MINUS SELECT * FROM B这样的语句
intersectAllowtrue是否允许SELECT * FROM A INTERSECT SELECT * FROM B这样的语句
constArithmeticAllowtrue拦截常量运算的条件,比如说WHERE FID = 3 - 1,其中"3 - 1"是常量运算表达式。
limitZeroAllowfalse是否允许limit 0这样的语句

禁用对象检测配置

配置项缺省值描述
tableChecktrue检测是否使用了禁用的表
schemaChecktrue检测是否使用了禁用的Schema
functionChecktrue检测是否使用了禁用的函数
objectChecktrue检测是否使用了“禁用对对象”
variantChecktrue检测是否使用了“禁用的变量”
readOnlyTables指定的表只读,不能够在SELECT INTO、DELETE、UPDATE、INSERT、MERGE中作为"被修改表"出现<

Jdbc相关配置

配置项缺省值描述
metadataAllowtrue是否允许调用Connection.getMetadata方法,这个方法调用会暴露数据库的表信息
wrapAllowtrue是否允许调用Connection/Statement/ResultSet的isWrapFor和unwrap方法,这两个方法调用,使得有办法拿到原生驱动的对象,绕过WallFilter的检测直接执行SQL。

WallFiler配置说明

配置项缺省值描述
logViolationfalse对被认为是攻击的SQL进行LOG.error输出
throwExceptiontrue对被认为是攻击的SQL抛出SQLExcepton
config  
provider  

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

 

https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE-wallfilter

Druid是一种实时数据分析工具,而达梦是一种关系型数据库Druid Wallfilter是一种用于连接Druid和达梦数据库的插件。 Druid Wallfilter插件的作用是在Druid查询中进行SQL墙过滤,它允许Druid直接连接到达梦数据库,从而可以在Druid中对达梦数据库中的数据进行实时分析和查询。使用Druid Wallfilter可以实现将达梦数据库中的数据导入到Druid中,以便进行更复杂和高效的数据处理和分析。 Druid Wallfilter连接到达梦数据库的过程相对简单。首先,需要在Druid配置文件中添加达梦数据库的连接信息,包括数据库的地址、用户名、密码等。然后,在Druid的查询语句中使用特定的语法来指定连接到达梦数据库,并执行相应的SQL查询操作。Druid Wallfilter会自动将查询转换为达梦数据库可以理解的SQL语句,并将结果返回给Druid进行进一步处理和分析。 通过使用Druid Wallfilter连接达梦数据库,可以充分利用Druid的实时数据处理和分析能力,同时也可以充分发挥达梦数据库的数据存储和管理功能。这样,用户可以在Druid中进行复杂的数据查询和分析操作,同时又能够充分利用达梦数据库所提供的功能和特性,从而提升数据处理的性能和效率。 总而言之,Druid Wallfilter插件可以实现Druid与达梦数据库的连接,使得在Druid中对达梦数据库的数据进行实时查询和分析成为可能。通过合理配置和使用Druid Wallfilter,可以使得数据处理和分析过程更加高效和便捷。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值