• druid sql黑名单 报异常 sql injection violation, part alway true condition not allow


    最近使用druid,发现阿里这个连接池 真的很好用,可以监控到连接池活跃连接数 开辟到多少个连接数 关闭了多少个,对于我在项目中查看错误 问题,很有帮助,

    但是最近发现里面 有条sql语句 被拦截了,在sql黑名单里,程序抛出异常

    sql injection violation, part alway true condition not allow

    sql 语句大概如下 HIbernate 组合出来的sql

    SELECT this_.id AS id34_0_, this_.accountno AS accountno34_0_, this_.amount AS amount34_0_, this_.bankcard AS bankcard34_0_, this_.bankname AS bankname34_0_
    FROM lhu.bankinfo this_
    WHERE this_.type=? AND this_.isshow=? AND this_.useable=? AND this_.bankname=? AND this_.userrole LIKE ? AND 1=1 ORDER BY RAND()

    百度查了一下,大概解决方法就是在配置文件中  

    将属性<property name="filters" value="config,stat,wall,log4j" />改成<property name="filters" value="config,stat,log4j" />

    去掉 wall, 官方解析(监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall) , 这样问题确实解决,放druid不去过滤扫描这些语句。

    那之前那个sql语句涉及sql注入问题,又对sql注入进一步了解了一下:

    最后发现, ORDER BY RAND(),这句有很大的问题, ORDER BY RAND() 随机抽取的意思, 数据在执行会多次扫描表数据,这在数据量小的时候是可以做到随机抽取,

    从来满足业务需要,但是数据量大的时候,反而会影响查询的效率,而且查询时间也比较长,sql语句中rand() 做随机数,也被列为禁区,

    可能也是这个原因,druid认为这个语句是一个不安全的语句,从而过滤掉,类似的语句还有想sys_guid() 等都会去扫描整个表数据, 也会被拦截,

    后续再出现sql被拦截再更新上来

    个人观点,

  • 相关阅读:
    SCHTASKS /CREATE
    手机酷派4G5316 5313s 黑砖 求转成功 9008端口 9006端口 少走弯路选对镜像
    网络共享 相关知识与原理 操作步骤
    电脑 主板 硬盘的 电脑系统
    按键精灵 按键代码
    win7 快捷键 收集
    默认主页更改 主页锁定 打开浏览器时的网页设置
    按键精灵 以时间命名文件夹 创建文件 写入文件 和截图
    按键精灵-----按钮控制(开始子程序)的时候是要用到多线程的
    java web 大总结
  • 原文地址:https://www.cnblogs.com/catalina-/p/druid.html
Copyright © 2020-2023  润新知