jdbc删除创建存储过程时Druid拦截保存问题

发布于 2021-12-02 15:14:34 字数 1925 浏览 811 评论 8

@wenshao 你好,想跟你请教个问题:我Java jdbc代码执行删除存储过程sql语句,但是报了错误

java.sql.SQLException: sql injection violation, class com.alibaba.druid.sql.ast.statement.SQLDropProcedureStatement not allow :  DROP PROCEDURE IF EXISTS CP_PayCalc1
at com.alibaba.druid.wall.WallFilter.check(WallFilter.java:714)
at com.alibaba.druid.wall.WallFilter.connection_prepareStatement(WallFilter.java:240)
at com.alibaba.druid.filter.FilterChainImpl.connection_prepareStatement(FilterChainImpl.java:448)
at com.alibaba.druid.filter.FilterAdapter.connection_prepareStatement(FilterAdapter.java:928)
at com.alibaba.druid.filter.FilterEventAdapter.connection_prepareStatement(FilterEventAdapter.java:122)
at com.alibaba.druid.filter.FilterChainImpl.connection_prepareStatement(FilterChainImpl.java:448)
at com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl.prepareStatement(ConnectionProxyImpl.java:342)
at com.alibaba.druid.pool.DruidPooledConnection.prepareStatement(DruidPooledConnection.java:323)
at com.mchr.db.Database.execute(Database.java:222)
at com.mchr.db.Database.execute(Database.java:210)
at com.mchr.custom.controller.PayFormulaController.main(PayFormulaController.java:107)
Exception in thread "main" com.mchr.exception.SqlException: SQL:1 param:[] sql: DROP PROCEDURE IF EXISTS CP_PayCalc1   sql injection violation, class com.alibaba.druid.sql.ast.statement.SQLDropProcedureStatement not allow :  DROP PROCEDURE IF EXISTS CP_PayCalc1
at com.mchr.db.Database.getSqlException(Database.java:916)
at com.mchr.db.Database.execute(Database.java:229)
at com.mchr.db.Database.execute(Database.java:210)
at com.mchr.custom.controller.PayFormulaController.main(PayFormulaController.java:107)

最后,我把filter中的wall去掉好了,但是这样就不能进行预防sql注入了,请问有没有更好的解决办法?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

吃颗糖壮壮胆 2021-12-04 14:44:04

MySQL数据库,那新版本sql语句创建存储过程支持吗,我试了一下,老版本创建存储过程也报错。

离不开的别离 2021-12-04 14:25:32

Druid在于Activiti使用的时候也遇到过SQL防火墙不支持某些语句,Druid的SQL防火墙或拦截Activiti工作流框架执行的一些比如创建表之类的SQL语句。我现在做法是暂时不开启这个功能。

只为守护你 2021-12-04 13:41:45

这个是问题,内置的SQL防火墙目前不支持DropProcedure语法,已经修复此问题,等周末发布新版本吧

蓝颜夕 2021-12-04 12:42:59

因为我要用代码生成一个存储过程,首先要判断一下数据库有没有这个存储过程,有的话就删了它再重新创建,但是就在删除的时候报错说是sql注入,不允许操作,有好的解决办法没?

兮颜 2021-12-04 10:52:32

回复:
@小鹏学开源 绕个道吧,试试create or replace process试试。如果再不行,就把创建语法封装到一个function里试试。

命硬 2021-12-03 23:52:05

正常的业务处理,怎么会要执行删除存储过程的代码呢?

成熟的代价 2021-12-03 16:03:46

好的,谢谢!

自此以后,行同陌路 2021-12-02 21:15:06

遇到问题反馈到这里:https://github.com/alibaba/druid/issues ,我会尽快跟进的,最近更新还挺快的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文