用于转义字符串的标准库(没有预处理语句)

时间:2011-11-10 16:13:51

标签: java sql stringescapeutils

我正在搜索Java标准库以在SQL语句中使用它们之前转义字符串。这主要是为了防止错误并防止SQL注入。 不幸的是,我将无法像许多其他线程中所建议的那样使用预准备语句。

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

非常感谢你!

2 个答案:

答案 0 :(得分:2)

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

而不是:

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

我会用:

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

然后,您需要将注入的字符串(不需要任何转义)作为SQL方法的参数传递。这是how to do it using 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如何使用select argument作为示例。

希望这有帮助。

答案 1 :(得分:1)

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