java - 转义字符串的标准库(没有准备好的语句)

标签 java sql stringescapeutils

我正在寻找一个 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/

相关文章:

php - Fetch Assoc - 每个 ID 将数据添加到数组一次

java - “找不到符号”或“无法解析符号”错误是什么意思?

java - 使用 envers 列出每个实体的最新版本

SQL - 输入与非输入

java - StringEscapeUtils 取消转义除换行符 (\n) 之外的所有内容

java - JSP 无法解析 org.apache.commons.lang 的导入

java - 如何在java中创建包含转义序列的字符串而不使用StringEscapeUtils类?

java - 对初始化程序的建议

java - HTTPServer 发布参数

java - 创建一个 ActorSelection 以获取在父 Actor 中创建的 ActorRef