6

我知道使用准备好的语句是防止 SQL 注入(以及由于未经检查的输入中的未转义字符导致的语法错误)的最佳方法。

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

有一个类似的问题,但重点是解决您有一个无法通过准备好的语句处理的表等参数的问题。我的情况不同,希望更简单,因为我有简单的 SQL 语句。我想知道是否有复制以下内容而不使用的最佳实践PreparedStatement

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

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

4

2 回答 2

2

ESAPI 库具有转义 SQL 输入的过程,以及在必要时开发您自己的数据库特定编码器的过程。

于 2012-11-07T16:35:24.160 回答
1

查看JTDS 常见问题解答- 我非常有信心,通过组合属性prepareSQLmaxStatements您可以去那里(或者“可能已经去了”,因为您可能在几年前完成了该任务 :-))

于 2015-11-05T15:02:21.380 回答