История вопроса:
В настоящее время я разрабатываю интерфейс Java для базы данных Enterprise CMS (Business Objects). На данный момент я создаю функцию, позволяющую пользователю создавать собственный запрос к базе данных. Я уже реализовал меры, чтобы гарантировать, что пользователь может выбирать только с помощью подмножества доступных столбцов и операторов, которые были одобрены для доступа пользователя (например, можно выбрать SI_EMAIL_ADDRESS, а более мощные поля, такие как SI_CUID, нельзя). До сих пор все шло гладко, но теперь пришло время защитить эту функцию от потенциальных атак путем внедрения SQL-кода.
Вопрос:
Я ищу способ экранировать вводимые пользователем строки. Я уже видел PerparedStatement, однако я вынужден использовать сторонние API для доступа к базе данных. Эти API неизменны для меня, и о прямом доступе к базе данных не может быть и речи. Отдельные методы принимают строки, представляющие выполняемые запросы, что делает недействительным PreparedStatement (который, насколько мне известно, должен выполняться при прямом подключении к базе данных).
Я рассматривал возможность использования String.replace(), но не хочу изобретать велосипед, если это возможно. Кроме того, я далек от экспертов по безопасности, разработавших PerparedStatement.
Я также просмотрел справочник по Java API для PerparedStatement, надеясь найти какой-нибудь метод toString().Увы, ничего подобного найти не удалось.
Будем признательны за любую помощь. Заранее спасибо.
Ссылки: