3

我正在寻找一个 Java 标准库来在 SQL 语句中使用它们之前转义字符串。这主要是为了防止错误,也是为了防止 SQL 注入。不幸的是,我将无法使用许多其他线程中建议的准备好的语句。

我可以使用任何标准库吗?我在 Apache Commons 见过StringEscapeUtils,但我真的不知道这是否是最先进的。

非常感谢您!

4

2 回答 2

2

由于 SQL 注入安全问题,这是一个重要的问题,也是一个关键的问题。我会考虑使用 SQL?类型参数而不是转义。例如,要搜索特定字符串:

而不是这样做:

SELECT * FROM accounts
    WHERE name = 'escapedstring1' AND password = 'escapedstring2'

我会使用:

SELECT * FROM accounts WHERE name = ? AND password = ?

然后,您需要将注入的字符串(无需任何转义)作为参数传递给您的 SQL 方法。这是使用 JDBC的方法。不确定这是否适用于您。

就像是:

String statement = "SELECT * FROM accounts WHERE name = ? AND password = ?";
try {
  PreparedStatement stmt = databaseConnection.prepareStatement(updateString);
  // notice that it is 1 based, not 0 (ick)
  stmt.setString(1, name);
  stmt.setString(2, password);
  ResultSet results = stmt.executeQuery();

下面是我的 ORM 库ORMLite如何使用选择参数作为示例。

希望这可以帮助。

于 2011-11-10T16:36:14.397 回答
1

你可以使用 Apache Commons,它是一个非常成熟的项目。

于 2011-11-10T16:36:16.370 回答