加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 在不使用预准备语句的情况下在JDBC中阻止SQL注入

发布时间:2020-12-14 19:23:56 所属栏目:Java 来源:网络整理
导读:我知道使用Prepared Statements是防止SQL注入的最佳方法(以及未经检查的输入中未转义字符导致的语法错误). 我目前的情况是我正在编写一些Java代码来将数据从一个第三方应用程序移动到另一个应用程序.目标应用程序使用Sybase的专有版本,因此虽然我确实有JTDS
我知道使用Prepared Statements是防止SQL注入的最佳方法(以及未经检查的输入中未转义字符导致的语法错误).

我目前的情况是我正在编写一些Java代码来将数据从一个第三方应用程序移动到另一个应用程序.目标应用程序使用Sybase的专有版本,因此虽然我确实有JTDS JDBC驱动程序,但PreparedStatement失败,因为驱动程序使用的临时存储过程在数据库的这种特殊风格中不受支持.所以我只有Statement才能使用,我无法控制用户输入,因为它来自另一个应用程序.

有this similar question但是这侧重于修复问题,如果你有一个参数,例如一个无法通过Prepared Statement处理的表.我的情况不同,希望更简单,因为我有简单的SQL语句.我想知道是否有最佳实践来复制类似下面的内容而不使用PreparedStatement:

PreparedStatement statement = connection.prepareStatement("UPDATE mytable SET value=? WHERE id=?");
statement.setInt(1,getID());
statement.setString(2,userInput);
statement.executeUpdate();

所以我想问题是如何可靠地清理用户输入?我可以尝试从头开始自己做,但这似乎是一个坏主意,因为可能至少有一个我会想念的边缘情况,所以我希望那里有一个库可以为我做这个,但是到目前为止我还没能找到一个.

解决方法

ESAPI库具有 escaping input for SQL的过程,并在必要时开发自己的特定于db的编码器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读