我知道使用准备好的语句是防止 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();
所以我想问题是如何可靠地清理用户输入?我可以尝试自己从头开始,但这似乎是个坏主意,因为我可能至少会错过一个边缘情况,所以我希望那里有一个图书馆可以为我做到这一点,但是到目前为止我还没有找到一个。