开发者社区> 问答> 正文

insert all 在1.2.x中出现问题OracleMultiInsertStatement$I

具体异常如下: Cause: java.sql.SQLException: sql injection violation, dbType oracle, druid-version 1.2.3, class com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMultiInsertStatement$InsertIntoClause not allow : INSERT ALL INTO xxxx

我使用1.1.x的版本没有任何问题,如果升级到1.2.x就出现这个异常,我尝试配置wall.enabled=true,wall.config.comment-allow:true,问题依然存在。

原提问者GitHub用户6LWa6ZKx

展开
收起
山海行 2023-07-05 18:13:13 118 0
4 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    根据您提供的异常信息,看起来是由于使用了 Druid 1.2.x 版本中新增的 SQL 防火墙(SQL Wall)机制,导致在执行 INSERT ALL INTO 语句时出现了 SQL 注入检测异常。

    为了解决这个问题,您可以尝试通过以下两种方式来处理:

    禁用 SQL 防火墙。在 Druid 的配置文件中,将 wall.enabled 参数设置为 false,即可禁用 SQL 防火墙机制。请注意,禁用 SQL 防火墙会使系统变得更加脆弱,需要谨慎操作。

    配置 SQL 防火墙规则。如果您需要使用 SQL 防火墙机制来保护系统安全,可以尝试配置相应的 SQL 防火墙规则,以允许 INSERT ALL INTO 语句的执行。在 Druid 的配置文件中,可以通过 wall.config 参数来配置 SQL 防火墙规则。

    2023-07-30 20:00:11
    赞同 展开评论 打赏
  • 将"wall.enabled=true"和"wall.config.comment-allow:true"配置添加到了配置文件中,这是为了启用Druid的SQL防火墙(SQLWall)功能,并允许注释语句通过。

    2023-07-11 09:16:57
    赞同 展开评论 打赏
  • 问题已修复,请用新版本

    https://github.com/alibaba/druid/releases/tag/1.2.5

    原回答者GitHub用户wenshao

    2023-07-06 10:48:25
    赞同 展开评论 打赏
  • 根据异常信息,您遇到了一个SQL注入违规的问题。这个异常是由Druid数据库连接池引起的,并指出在版本1.2.3中不允许使用INSERT ALL INTO语法。

    您尝试将wall.enabled配置设置为true,这是正确的做法。"wall"代表防火墙(WallFilter),它是Druid提供的一种用于预防SQL注入攻击的功能。通过启用wall.enabled,Druid会对SQL语句进行检查和过滤,以防止潜在的安全威胁。

    然而,根据您的描述,即使您启用了防火墙功能,升级到1.2.x版本后仍然出现了异常。这可能是因为防火墙的默认配置不允许使用INSERT ALL INTO语法。您可以通过调整防火墙的配置来解决这个问题。

    以下是一个示例配置,您可以尝试将其应用到您的项目中:

    druid.filters=wall
    wall.config.multiStatementAllow=true
    wall.config.insertValuesCheckColumns=true
    

    这些配置将允许多条SQL语句和检查插入语句的列。请确保将这些配置与Druid的其他配置项相结合,以适应您的具体需求。

    希望这能帮助您解决问题!如有任何进一步的疑问,请随时提问。

    2023-07-05 18:52:58
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载