美文网首页Java 杂谈
Druid 的 WallFilter 抛出 sql inject

Druid 的 WallFilter 抛出 sql inject

作者: deniro | 来源:发表于2019-07-21 14:51 被阅读1次

1 现象

查询某个模块数据时,抛出以下异常:

Caused by: java.sql.SQLException: sql injection violation, comment not allow : select count(*) FROM sys_x a WHERE 1=1 --澶囨敞 AND a.organization_id NOT IN( SELECT b.descendant_id FROM sys_y b WHERE b.path_length!=0) 
    at com.alibaba.druid.wall.WallFilter.checkInternal(WallFilter.java:800)
    at com.alibaba.druid.wall.WallFilter.connection_prepareStatement(WallFilter.java:251)
    at com.alibaba.druid.filter.FilterChainImpl.connection_prepareStatement(FilterChainImpl.java:473)
    at com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl.prepareStatement(ConnectionProxyImpl.java:342)
    at com.alibaba.druid.pool.DruidPooledConnection.prepareStatement(DruidPooledConnection.java:349)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy$TransactionAwareInvocationHandler.invoke(TransactionAwareDataSourceProxy.java:239)
    at com.sun.proxy.$Proxy23.prepareStatement(Unknown Source)
    at org.springframework.jdbc.core.PreparedStatementCreatorFactory$PreparedStatementCreatorImpl.createPreparedStatement(PreparedStatementCreatorFactory.java:245)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:583)
    ... 59 more

2 原因

  1. 在数据源配置时,加上了 Druid 的 wall 过滤器。而它默认的拦截策略是,不允许 SQL 中带有备注。
  2. 在该条 SQL 语句中,果然加了备注。

3 解决

  1. 如果是新项目,SQL 语句较少,那么可以去除语句中的备注。
  2. 如果是老项目,那么就必须对 Druid 的 wall 过滤器进行配置,打开项目的 XML 配置文件,配置 druid 拦截过滤器,允许 SQL 语句中存在注释:
<!--配置 druid 拦截过滤器-->
<bean id="wall-filter-config" class="com.alibaba.druid.wall.WallConfig" init-method="init">
    <!-- 是否允许语句中存在注释-->
    <property name="commentAllow" value="true" />
</bean>
<bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter">
    <property name="config" ref="wall-filter-config" />
</bean>

然后在 Druid 数据源配置中,加入 Druid 拦截过滤器:

<!--druid 数据源-->
<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
    ...
    <!--配置 Druid 过滤器-->
    <property name="proxyFilters">
        <list>
                ...
            <ref bean="wall-filter"/>
        </list>
    </property>
        ...
</bean>

重启应用,看看问题是不是已经解决啦O(∩_∩)O哈哈~

相关文章

  • Druid 的 WallFilter 抛出 sql inject

    1 现象 查询某个模块数据时,抛出以下异常: 2 原因 在数据源配置时,加上了 Druid 的 wall 过滤器。...

  • Mysql Druid wallFilter

    因业务需要,系统需要定时更新下载文件(.csv),并更新数据库。由于数据量较大,决定使用“load data in...

  • [druid 源码解析] 10 wallFilter解析

    接下来,我们将讲解 druid pool 包以外的包解析,这次我们先从 wallFilter 开始说起,我们先来...

  • 2018-01-18

    Druid Sql 防御的监控截图 Druid SQL 监控的截图 Druid 应用监控的截图

  • Druid SQL官方文档

    Apache Druid supports two query languages: Druid SQL and ...

  • SQL inject

    1 基本概念 1.1 SQL inject 漏洞概述 在owasp发布的top 10漏洞里面,注入漏洞一直是危...

  • oracle导出dmp文件

    1、通过plsql删除druid_sql、druid_profile 2、给空表拼接alter table tab...

  • sql_inject

    3117002569 password 123456 http://www.mytju.com/classCod...

  • 009 java.sql.SQLException: inter

    java.sql.SQLException: interrupt Druid 今天看线上一直报 java.sql....

  • 【DVWA】SQL注入篇

    0x01 Low SQL Injection 最简单的注入,没有任何过滤,常规语句注入即可: SQL Inject...

网友评论

    本文标题:Druid 的 WallFilter 抛出 sql inject

    本文链接:https://www.haomeiwen.com/subject/wowmlctx.html