`
xiaoxuan_blog
  • 浏览: 29931 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

数据库连接池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>

 

 

指定配置装载的目录

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

数据库类型  目录
mysql META-INF/druid/wall/mysql
oracle META-INF/druid/wall/oracle
sqlserver META-INF/druid/wall/sqlserver
postgres META-INF/druid/wall/postgres

 

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

 

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

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

 

<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

拦截配置-语句

配置项 缺省值 描述
selelctAllow true 是否允许执行SELECT语句
selectAllColumnAllow true 是否允许执行SELECT * FROM T这样的语句。如果设置为false,不允许执行select * from t,但select * from (select id, name from t) a。这个选项是防御程序通过调用select *获得数据表的结构信息。
selectIntoAllow true SELECT查询中是否允许INTO字句
deleteAllow true 是否允许执行DELETE语句
updateAllow true 是否允许执行UPDATE语句
insertAllow true 是否允许执行INSERT语句
replaceAllow true 是否允许执行REPLACE语句
mergeAllow true 是否允许执行MERGE语句,这个只在Oracle中有用
callAllow true 是否允许通过jdbc的call语法调用存储过程
setAllow true 是否允许使用SET语法
truncateAllow true truncate语句是危险,缺省打开,若需要自行关闭
createTableAllow true 是否允许创建表
alterTableAllow true 是否允许执行Alter Table语句
dropTableAllow  true 是否允许修改表
commentAllow  false 是否允许语句中存在注释,Oracle的用户不用担心,Wall能够识别hints和注释的区别
noneBaseStatementAllow  false 是否允许非以上基本语句的其他语句,缺省关闭,通过这个选项就能够屏蔽DDL。
 multiStatementAllow  false  是否允许一次执行多条语句,缺省关闭
 useAllow  true  是否允许执行mysql的use语句,缺省打开
 describeAllow  true  是否允许执行mysql的describe语句,缺省打开
 showAllow  true  是否允许执行mysql的show语句,缺省打开
 commitAllow  true

 是否允许执行commit操作

rollbackAllow  true

 是否允许执行roll back操作

如果把selectIntoAllow、deleteAllow、updateAllow、insertAllow、mergeAllow都设置为false,这就是一个只读数据源了。

 

拦截配置-永真条件

配置项 缺省值 缺省值
selectWhereAlwayTrueCheck true 检查SELECT语句的WHERE子句是否是一个永真条件
selectHavingAlwayTrueCheck true 检查SELECT语句的HAVING子句是否是一个永真条件
deleteWhereAlwayTrueCheck true 检查DELETE语句的WHERE子句是否是一个永真条件
deleteWhereNoneCheck false 检查DELETE语句是否无where条件,这是有风险的,但不是SQL注入类型的风险
updateWhereAlayTrueCheck true  检查UPDATE语句的WHERE子句是否是一个永真条件
 updateWhereNoneCheck  false  检查UPDATE语句是否无where条件,这是有风险的,但不是SQL注入类型的风险
 conditionAndAlwayTrueAllow  false 检查查询条件(WHERE/HAVING子句)中是否包含AND永真条件
 conditionAndAlwayFalseAllow  false  检查查询条件(WHERE/HAVING子句)中是否包含AND永假条件
 conditionLikeTrueAllow true  检查查询条件(WHERE/HAVING子句)中是否包含LIKE永真条件

 

其他拦截配置

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

 

禁用对象检测配置

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

 

Jdbc相关配置

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

WallFiler配置说明

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

 

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

分享到:
评论

相关推荐

    数据库连接池druid-1.1.21.jar 和 配置文件druid.properties

    本主题将深入探讨数据库连接池Druid以及它的1.1.21版本,同时也会涉及如何配置其核心组件——`druid.properties`文件。 Druid是一个流行的Java数据库连接池实现,由阿里巴巴开发并开源。它不仅提供了数据库连接池的...

    java数据库连接池Druid

    Druid是阿里巴巴开源的一款优秀的数据库连接池实现,它不仅提供了基本的连接池功能,还集成了监控、日志、SQL解析等高级特性。本篇文章将深入探讨Druid的核心特性和使用方法。 1. **简介** Druid是阿里巴巴在2010...

    mysql驱动数据库连接池 druid jar

    MySQL驱动数据库连接池Druid是Java开发中常用的数据源管理工具,它由阿里巴巴开源并维护。在Java应用程序中,特别是Web应用服务器上,数据库连接池是必不可少的组件,用于优化数据库资源的使用,提高系统性能。本文...

    阿里druid连接池1.1.21版本(支持达梦数据库)

    基于阿里的druid连接池,自己把对国产数据库达梦的支持加上去了,支持了wall方式,暂时没发现什么问题 :) 使用方式同原版

    druid1.2.8 下载 数据库连接池

    Druid是阿里巴巴开源的一个高性能、多功能的数据库连接池组件,它在Java开发中广泛应用于各种项目的数据库管理。在1.2.8版本中,Druid提供了一系列优化和改进,旨在提高数据库访问性能,增强监控能力,并简化数据库...

    Druid数据库连接池及内置监控的配置和使用.zip

    在本篇文章中,我们将深入探讨如何配置和使用Druid的数据库连接池及其内置的监控功能。 1. **Druid数据库连接池** - **连接池的作用**:数据库连接池在应用启动时预创建一定数量的数据库连接,供应用在运行时复用...

    druid数据库连接池实现jar包.zip

    Druid数据库连接池是阿里巴巴开源的一款高效、强大的数据库连接池组件,它在Java应用程序中用于管理数据库连接,提高数据库访问性能并优化资源利用。这个压缩包包含`druid-1.1.22.jar`和`druid.properties`两个文件...

    druid数据库连接池

    Druid数据库连接池是一款高效、功能强大且高度可扩展的数据库连接池组件,由阿里巴巴公司开源。在Java应用程序中,数据库连接池是管理数据库连接的重要工具,它可以显著提高应用的性能和资源利用率。Druid因其出色的...

    druid数据库连接池.doc

    【Druid数据库连接池】 1. 简介 Druid是阿里巴巴开源的一款高效、强大的数据库连接池组件,由阿里巴巴的开发团队设计并维护。它不仅是一个连接池,还包含了监控统计、SQL解析、Web控制台等多个功能,是互联网行业...

    druid, 为监控而生的数据库连接池!阿里云DRDS(https.zip

    Druid,一个专为监控设计的数据库连接池,是阿里巴巴开源的一款高效、强大的数据库连接管理工具。在Java开发中,数据库连接池是应用性能优化的重要环节,它负责管理和复用数据库连接,减少创建和销毁连接的开销,...

    阿里德鲁伊数据库连接池子

    阿里德鲁伊数据库连接池(Druid)是阿里巴巴开源的一款高效、强大的数据库连接池组件,它在Java开发中被广泛使用。Druid旨在提供监控、性能优化和扩展性,为应用提供稳定、高效的数据库连接管理服务。下面我们将深入...

    阿里巴巴数据库连接池完整demo.zip

    阿里巴巴数据库连接池,通常指的是由阿里巴巴开源的Druid数据库连接池。它是一个高效、功能强大且高度可扩展的Java数据库连接池实现。Druid旨在提供监控、性能优化以及更友好的配置方式,使得数据库连接管理在企业级...

    druid案例

    Druid是阿里巴巴开源的一个强大、灵活且全面的数据库连接池组件,它不仅提供了数据库连接池功能,还集成了数据库监控、SQL解析、性能分析等多种高级特性。在这个“druid案例”中,我们将深入探讨Druid的核心功能及其...

    java_web.7zjava增删改查基于阿里数据库连接池

    Java Web技术是构建Web应用...通过以上内容,我们了解到如何在Java Web环境中使用Druid数据库连接池进行增删改查操作,以及Druid的一些核心特性和配置。在实际开发中,结合这些知识点,可以构建稳定、高效的Web应用。

    druid(德鲁伊)-1.2.8连接池jar包

    Druid,全称是Java Database Connectivity Druid,是一款由阿里巴巴...在实际应用中,开发者可以通过引入`druid-1.2.8.jar`包,结合相关配置,快速地在项目中引入并使用Druid连接池,以提升数据库访问的效率和稳定性。

    druid连接池jar包

    Druid是阿里巴巴开源的一个高效、强大的Java数据库连接池组件,它在淘宝等大型互联网公司得到了广泛的应用。Druid连接池的设计目标不仅仅是提供一个数据库连接管理工具,而是成为一个数据库访问的优化框架,它集成了...

    druid连接池相关资料

    Druid是阿里巴巴开源的一个高效、强大的Java数据库连接池。在Java应用程序中,数据库连接池是用于管理数据库连接的关键组件,它负责创建、分配、回收和管理数据库连接,从而提高数据库访问性能,节省系统资源。Druid...

    JDBC连接池使用工具 C3P0 连接池 and druid-1.0.9

    配置Druid连接池同样需要添加依赖并设置配置,例如在Spring的配置文件中: ```xml &lt;bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"&gt; ``` 总的来说,...

    德鲁伊Druid连接池.zip

    德鲁伊(Druid)连接池是阿里巴巴开源的一款高性能、功能强大的数据库连接池实现,它在Java应用程序中扮演着至关重要的角色,特别是在处理大量并发数据库访问的场景下。Druid提供了一系列优秀的特性,如监控、扩展性...

    Druid:用Java编写的数据库连接池-开源

    Druid是用Java编写的开源数据库连接池。 Druid能够为数据库连接提供大量强大的监视功能。 Druid已部署到Maven中央存储库。 Druid提供了可通过过滤链实现的监视功能。 它还带有WallFilter,它基于SQL语义分析来防止...

Global site tag (gtag.js) - Google Analytics