数据库连接池-配置 wallfilter
使用缺省配置的WallFilter
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
...
<property name="filters" value="wall"/>
</bean>
结合其他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.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 |
拦截配置-语句
| 配置项 | 缺省值 | 描述 |
|---|---|---|
| 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这样的语句 |
| selectLimit | -1 | 配置最大返回行数,如果select语句没有指定最大返回行数,会自动修改selct添加返回限制 |
禁用对象检测配置
| 配置项 | 缺省值 | 描述 |
| 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。 |
WallFilter配置说明
| 配置项 | 缺省值 | 描述 |
| logViolation | false | 对被认为是攻击的SQL进行LOG.error输出 |
| throwException | true | 对被认为是攻击的SQL抛出SQLException |
| config | ||
| provider |
刚开始引入WallFilter的时候,把logViolation设置为true,而throwException设置为false。就可以观察是否存在违规的情况,同时不影响业务运行。
https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE-wallfilter#%E6%8C%87%E5%AE%9Adbtype
数据库连接池-配置 wallfilter的更多相关文章
- 数据库连接池-配置 wallfilter问题解决-UncategorizedSQLException
wallFilter对sql有着严格的校验,会对有风险的sql过滤,抛出异常信息: org.springframework.jdbc.UncategorizedSQLException: ### Er ...
- Tomcat6.0数据库连接池配置
http://blog.163.com/magicc_love/blog/static/185853662201111101130969/ oracle驱动包Tomcat 6.0配置oracle数据库 ...
- 【Java】java数据库连接池配置的几种方法
今天遇到了关于数据源连接池配置的问题,发现有很多种方式可以配置,现总结如下,希望对大家有所帮助:(已Mysql数据库为例) 一,Tomcat配置数据源: 方式一:在WebRoot下面建文件夹META- ...
- Tomcat数据库连接池配置
Tomcat数据库连接池配置 1. Server.xml的配置 (1)找到tomcat所在目录下的conf\server.xml文件 (2)在文件最后一个</host> ...
- 数据库连接池配置(案例及排查指南) 原创: 有赞技术 有赞coder 4天前
数据库连接池配置(案例及排查指南) 原创: 有赞技术 有赞coder 4天前
- Druid数据库连接池配置
DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0.DBCP.PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB ...
- 阿里druid数据库连接池配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- j2ee数据库连接池配置大全
<!--web.xml begin--> <!--web.xml Spring ApplicationContext配置文件的路径 ,可使用通配符,多个路径用,号分隔 --> ...
- Spring + MyBatis中常用的数据库连接池配置总结
Spring在第三方依赖包中包含了两个数据源的实现类包,其一是Apache的DBCP,其二是 C3P0.可以在Spring配置文件中利用这两者中任何一个配置数据源. DBCP数据源 DBCP类包位于 ...
随机推荐
- CentOS7下安装Docker-Compose No module named 'requests.packages.urllib3'
在使用Docker的时候,有一个工具叫做 docker-compose,安装它的前提是要安装pip工具. 1.首先检查Linux有没有安装Python-pip包,直接执行 yum install p ...
- 【loj6191】「美团 CodeM 复赛」配对游戏
题目 显然期望dp. 简单想法: f[i][j]表示前i个人中向右看并且没有被消除的人数的概率 如果第i+1个人是向右,$f[i+1][j+1]=f[i][j]/2$ 如果第i+1个人是向左,$f[i ...
- 【Codevs1907】方格取数3(最小割)
题意:在一个有m*n 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法. n,m<=30 思路:如果 ...
- 星球大战 BZOJ 1015
星球大战 [问题描述] 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过 ...
- 在dedecms系统下, 改写火车头的入库接口 写一个接口文件运行一次自动读取 http://news.163.com/rank/
1:火车头入库接口里面的密码与login.php传过来的密码是保持一致的: 2:在(!$ispost)里面编写一个form表单提交,验证用户名,channelid,以及typeid; html代码格式 ...
- 数学知识巧学JCF(Java Collections framework)
不知你是否还记得高中我们学过的集合,映射,函数,数学确实很牛逼,拿它来研究java集合类,轻而易举的就把知识理解了.本篇文章适合初学java集合类的小白,也适合补充知识漏缺的学习者,同时也是面试者可以 ...
- SQL入门随笔(上机实验报告)
<数据定义部分> 一.定义模式和删除模式 a.为用户定义一个模式学生—课程模式 S-T CREATE SCHEMA "S-T" AUTHORIZATION USE ...
- python多线程实践小结
参考:http://www.cnblogs.com/tqsummer/archive/2011/01/25/1944771.html #!/usr/bin/env python import sys ...
- 高级算法设计讲义 Lecture Notes for Advanced Algorithm Design
(Last modification: 2012-12-17) Textbooks: (1) David Williamson, David Shmoys. The Design of Approxi ...
- grafana结合influxdb、open-falcon出图配置
1.https://www.jianshu.com/p/fadcf4d92b0e 2.https://www.jianshu.com/p/21ce6ee143f3 3.http://www.super ...