具体异常如下: 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
根据您提供的异常信息,看起来是由于使用了 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 防火墙规则。
将"wall.enabled=true"和"wall.config.comment-allow:true"配置添加到了配置文件中,这是为了启用Druid的SQL防火墙(SQLWall)功能,并允许注释语句通过。
问题已修复,请用新版本
https://github.com/alibaba/druid/releases/tag/1.2.5
原回答者GitHub用户wenshao
根据异常信息,您遇到了一个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的其他配置项相结合,以适应您的具体需求。
希望这能帮助您解决问题!如有任何进一步的疑问,请随时提问。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。