• Mycat的防火墙配置


    在server.xml文件中,firewall标签用来定义防火墙;firewall下whitehost标签用来定义 IP白名单 ,blacklist用来定义 SQL黑名单。

    <firewall>
        <whitehost>
                <!-- ip 白名单 用户对应的可以访问的 ip 地址 -->
            <host user="mycat" host="127.0.0.1"></host>
        </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,是否允许非以上基本语句的其他语句,缺省关闭,通过这个选项就能够屏蔽 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中作为"被修改表"出现
  • 相关阅读:
    1028 人口普查 (20分)
    1027 打印沙漏 (20分)
    1026 程序运行时间 (15分)
    1025 反转链表 (25分)
    1024 科学计数法 (20分)
    1023 组个最小数 (20分)
    1022 D进制的A+B (20分)
    1021 个位数统计 (15分)
    1020 月饼 (25分)
    1019 数字黑洞 (20分)
  • 原文地址:https://www.cnblogs.com/myitnews/p/12382277.html
Copyright © 2020-2023  润新知