我正在搜索Java标准库以在SQL语句中使用它们之前转义字符串。这主要是为了防止错误并防止SQL注入。 不幸的是,我将无法像许多其他线程中所建议的那样使用预准备语句。
我可以使用任何标准库吗?
我在Apache Commons看过StringEscapeUtils
,但我真的不知道这是否是最先进的。
非常感谢你!
答案 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,这是非常成熟的项目。