Стандартная библиотека для экранирования строк (без подготовленных операторов) - PullRequest
3 голосов
/ 10 ноября 2011

Я ищу стандартную библиотеку Java для экранирования строк перед их использованием в операторе SQL.Это главным образом для предотвращения ошибок и для внедрения SQL-кода.К сожалению, я не смогу использовать подготовленные операторы, как предлагается во многих других потоках.

Есть ли стандартная библиотека, которую я могу использовать?Я видел StringEscapeUtils в Apache Commons, но я действительно не знаю, является ли это современным.

Заранее большое спасибо!

Ответы [ 2 ]

2 голосов
/ 10 ноября 2011

Это нетривиальная и критическая проблема из-за проблем безопасности внедрения 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();

Вот как ORMLite , моя библиотека ORM, делает это в качестве примера, используя выберите аргумент .

Надеюсь, это поможет.

1 голос
/ 10 ноября 2011

Вы можете использовать Apache Commons, это очень зрелый проект.

...