Экранирование строк SQL в Java

История вопроса:

В настоящее время я разрабатываю интерфейс Java для базы данных Enterprise CMS (Business Objects). На данный момент я создаю функцию, позволяющую пользователю создавать собственный запрос к базе данных. Я уже реализовал меры, чтобы гарантировать, что пользователь может выбирать только с помощью подмножества доступных столбцов и операторов, которые были одобрены для доступа пользователя (например, можно выбрать SI_EMAIL_ADDRESS, а более мощные поля, такие как SI_CUID, нельзя). До сих пор все шло гладко, но теперь пришло время защитить эту функцию от потенциальных атак путем внедрения SQL-кода.

Вопрос:

Я ищу способ экранировать вводимые пользователем строки. Я уже видел PerparedStatement, однако я вынужден использовать сторонние API для доступа к базе данных. Эти API неизменны для меня, и о прямом доступе к базе данных не может быть и речи. Отдельные методы принимают строки, представляющие выполняемые запросы, что делает недействительным PreparedStatement (который, насколько мне известно, должен выполняться при прямом подключении к базе данных).

Я рассматривал возможность использования String.replace(), но не хочу изобретать велосипед, если это возможно. Кроме того, я далек от экспертов по безопасности, разработавших PerparedStatement.

Я также просмотрел справочник по Java API для PerparedStatement, надеясь найти какой-нибудь метод toString().Увы, ничего подобного найти не удалось.

Будем признательны за любую помощь. Заранее спасибо.

Ссылки:

Java — escape-строка для предотвращения SQL-инъекций

Java-эквивалент PHP mysql_real_escape_string()

6
задан Community 23 May 2017 в 11:59
поделиться