这个文档提供基于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版本,同时也会涉及如何配置其核心组件——`druid.properties`文件。 Druid是一个流行的Java数据库连接池实现,由阿里巴巴开发并开源。它不仅提供了数据库连接池的...
Druid是阿里巴巴开源的一款优秀的数据库连接池实现,它不仅提供了基本的连接池功能,还集成了监控、日志、SQL解析等高级特性。本篇文章将深入探讨Druid的核心特性和使用方法。 1. **简介** Druid是阿里巴巴在2010...
MySQL驱动数据库连接池Druid是Java开发中常用的数据源管理工具,它由阿里巴巴开源并维护。在Java应用程序中,特别是Web应用服务器上,数据库连接池是必不可少的组件,用于优化数据库资源的使用,提高系统性能。本文...
基于阿里的druid连接池,自己把对国产数据库达梦的支持加上去了,支持了wall方式,暂时没发现什么问题 :) 使用方式同原版
Druid是阿里巴巴开源的一个高性能、多功能的数据库连接池组件,它在Java开发中广泛应用于各种项目的数据库管理。在1.2.8版本中,Druid提供了一系列优化和改进,旨在提高数据库访问性能,增强监控能力,并简化数据库...
在本篇文章中,我们将深入探讨如何配置和使用Druid的数据库连接池及其内置的监控功能。 1. **Druid数据库连接池** - **连接池的作用**:数据库连接池在应用启动时预创建一定数量的数据库连接,供应用在运行时复用...
Druid数据库连接池是阿里巴巴开源的一款高效、强大的数据库连接池组件,它在Java应用程序中用于管理数据库连接,提高数据库访问性能并优化资源利用。这个压缩包包含`druid-1.1.22.jar`和`druid.properties`两个文件...
Druid数据库连接池是一款高效、功能强大且高度可扩展的数据库连接池组件,由阿里巴巴公司开源。在Java应用程序中,数据库连接池是管理数据库连接的重要工具,它可以显著提高应用的性能和资源利用率。Druid因其出色的...
【Druid数据库连接池】 1. 简介 Druid是阿里巴巴开源的一款高效、强大的数据库连接池组件,由阿里巴巴的开发团队设计并维护。它不仅是一个连接池,还包含了监控统计、SQL解析、Web控制台等多个功能,是互联网行业...
Druid,一个专为监控设计的数据库连接池,是阿里巴巴开源的一款高效、强大的数据库连接管理工具。在Java开发中,数据库连接池是应用性能优化的重要环节,它负责管理和复用数据库连接,减少创建和销毁连接的开销,...
阿里德鲁伊数据库连接池(Druid)是阿里巴巴开源的一款高效、强大的数据库连接池组件,它在Java开发中被广泛使用。Druid旨在提供监控、性能优化和扩展性,为应用提供稳定、高效的数据库连接管理服务。下面我们将深入...
阿里巴巴数据库连接池,通常指的是由阿里巴巴开源的Druid数据库连接池。它是一个高效、功能强大且高度可扩展的Java数据库连接池实现。Druid旨在提供监控、性能优化以及更友好的配置方式,使得数据库连接管理在企业级...
Druid是阿里巴巴开源的一个强大、灵活且全面的数据库连接池组件,它不仅提供了数据库连接池功能,还集成了数据库监控、SQL解析、性能分析等多种高级特性。在这个“druid案例”中,我们将深入探讨Druid的核心功能及其...
Java Web技术是构建Web应用...通过以上内容,我们了解到如何在Java Web环境中使用Druid数据库连接池进行增删改查操作,以及Druid的一些核心特性和配置。在实际开发中,结合这些知识点,可以构建稳定、高效的Web应用。
Druid,全称是Java Database Connectivity Druid,是一款由阿里巴巴...在实际应用中,开发者可以通过引入`druid-1.2.8.jar`包,结合相关配置,快速地在项目中引入并使用Druid连接池,以提升数据库访问的效率和稳定性。
Druid是阿里巴巴开源的一个高效、强大的Java数据库连接池组件,它在淘宝等大型互联网公司得到了广泛的应用。Druid连接池的设计目标不仅仅是提供一个数据库连接管理工具,而是成为一个数据库访问的优化框架,它集成了...
Druid是阿里巴巴开源的一个高效、强大的Java数据库连接池。在Java应用程序中,数据库连接池是用于管理数据库连接的关键组件,它负责创建、分配、回收和管理数据库连接,从而提高数据库访问性能,节省系统资源。Druid...
配置Druid连接池同样需要添加依赖并设置配置,例如在Spring的配置文件中: ```xml <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"> ``` 总的来说,...
德鲁伊(Druid)连接池是阿里巴巴开源的一款高性能、功能强大的数据库连接池实现,它在Java应用程序中扮演着至关重要的角色,特别是在处理大量并发数据库访问的场景下。Druid提供了一系列优秀的特性,如监控、扩展性...
Druid是用Java编写的开源数据库连接池。 Druid能够为数据库连接提供大量强大的监视功能。 Druid已部署到Maven中央存储库。 Druid提供了可通过过滤链实现的监视功能。 它还带有WallFilter,它基于SQL语义分析来防止...