我知道使用Prepared Statements是防止SQL注入的最佳方法(以及未经检查的输入中未转义字符导致的语法错误)。
我目前的情况是我正在编写一些Java代码来将数据从一个第三方应用程序移动到另一个第三方应用程序。目标应用程序使用Sybase的专有版本,因此我确实JTDS JDBC驱动程序PreparedStatement
失败,因为驱动程序使用的临时存储过程在数据库的这种特殊风格中不受支持。所以我只有Statement
才能使用,我无法控制用户输入,因为它来自另一个应用程序。
有this similar question,但是重点是解决问题,例如表格无法通过预备语句处理。我的情况不同,希望更简单,因为我有简单的SQL语句。我想知道是否有最佳做法可以在不使用PreparedStatement
的情况下复制以下内容:
PreparedStatement statement = connection.prepareStatement("UPDATE mytable SET value=? WHERE id=?");
statement.setInt(1, getID());
statement.setString(2,userInput);
statement.executeUpdate();
所以我猜问题是如何可靠地清理用户输入?我可以尝试从头开始自己做,但这似乎是一个坏主意,因为可能至少有一个我会想念的边缘情况,所以我希望那里有一个库可以为我做这个,但是到目前为止我还没找到。
答案 0 :(得分:2)
ESAPI库具有escaping input for SQL的过程,并在必要时开发您自己的数据库特定编码器。
答案 1 :(得分:1)
结帐JTDS FAQ - 我非常有信心,通过多个属性组合prepareSQL
和maxStatements
,您可以去那里(或者#34;可能已经过去了#34} ;因为你可能在几年前完成了这项任务:-))