Как экранировать строку для защиты от SQL-injection?
Мне оставили такой комментарий:
Лучше table экранировать от потенциальной sql инъекции
Вот к такой строке:
String.format("SELECT * FROM %s WHERE phone = :phone", table)
phone я подставляю через map в PreparedStatement, а как быть с именем таблицы?
Как мне экранировать table, чтобы учесть этот момент?
Ответы (1 шт):
Автор решения: Алексей Шиманский
→ Ссылка
Подготовленные переменные применяются исключительно для значений колонок, а не для имён таблиц. Если хотите, чтобы пользователь подставлял имя, то вам надо завести массив имён таблиц (белый список), которые можно писать. Далее сравнивать написанное пользователем имя таблицы с содержанием белого списка. Если его там нет, делать атата пользователю