文章目录
17.防火墙配置
白名单和 SQL 黑名单说明:
在 server.xml 中配置:
<firewall>
<whitehost>
<host user="mycat" host="127.0.0.1"></host> ip 白名单 用户对应的可以访问的 ip 地址
</whitehost>
<blacklist check="true">
<property name="selelctAllow">false</property> 黑名单允许的 权限 后面为默认
</blacklist>
</firewall
黑名单拦截明细配置
配置项 | 缺省值 | 描述 |
---|
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 | 是否允许非以上基本语句的其他语句,缺省关闭,通过这个选项 |
multiStatementAllow | FALSE | 是否允许一次执行多条语句,缺省关闭 |
useAllow | TRUE | 是否允许执行 mysql 的 use 语句,缺省打开 |
describeAllow | TRUE | 是否允许执行 mysql 的 describe 语句,缺省打开 |
showAllow | TRUE | 是否允许执行 mysql 的 show 语句,缺省打开 |
commitAllow | TRUE | 是否允许执行 commit 操作 |
rollbackAllow | TRUE | 是否允许执行 roll back 操作 |
| | |
拦截配置-永真条件
配置项 | 缺省值 描述 | 描述 |
---|
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 | 检测是否使用了“禁用的变量” |