我正在寻找一个 Java 标准库来在 SQL 语句中使用字符串之前对字符串进行转义。这主要是为了防止错误,也是为了防止 SQL 注入(inject)。 不幸的是,我将无法像许多其他线程中建议的那样使用准备好的语句。
有没有我可以使用的标准库?
我在 Apache Commons 看到过 StringEscapeUtils
,但我真的不知道这是否是最先进的。
非常感谢您!
最佳答案
这是一个非常重要的问题,也是一个关键问题,因为 SQL 注入(inject)安全问题。相反,我会考虑使用 SQL ?
类型参数而不是转义。例如,要搜索特定的字符串:
而不是做:
SELECT * FROM accounts
WHERE name = 'escapedstring1' AND password = 'escapedstring2'
我会使用:
SELECT * FROM accounts WHERE name = ? AND password = ?
然后您需要将注入(inject)的字符串(无需任何转义)作为参数传递给您的 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();
这是如何ORMLite ,我的 ORM 库,使用 select argument 作为示例.
希望这对您有所帮助。
关于java - 转义字符串的标准库(没有准备好的语句),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8082592/