Как экранировать строку для защиты от SQL-injection?

Мне оставили такой комментарий:

Лучше table экранировать от потенциальной sql инъекции

Вот к такой строке:

String.format("SELECT * FROM %s WHERE phone = :phone", table)

phone я подставляю через map в PreparedStatement, а как быть с именем таблицы?

Как мне экранировать table, чтобы учесть этот момент?


Ответы (1 шт):

Автор решения: Алексей Шиманский

Подготовленные переменные применяются исключительно для значений колонок, а не для имён таблиц. Если хотите, чтобы пользователь подставлял имя, то вам надо завести массив имён таблиц (белый список), которые можно писать. Далее сравнивать написанное пользователем имя таблицы с содержанием белого списка. Если его там нет, делать атата пользователю

→ Ссылка