PHP PDO защищает имя базы данных - PullRequest
0 голосов
/ 14 февраля 2019

Я понимаю, что вы не можете использовать имена баз данных или таблиц в качестве параметров в подготовленных выражениях.Тем не менее, наше приложение позволяет пользователю указать имя базы данных во время установки.Есть ли абстрактный или PDO способ указать эти имена (обратные метки для MySQL, скобки для MSSql и т. Д.)?

1 Ответ

0 голосов
/ 14 февраля 2019

Вы не можете напрямую экранировать имена столбцов и таблицы в PDO.Вы можете увидеть ответ здесь:

экранирование имени столбца с помощью PDO

Что вы можете сделать в этой ситуации, это сделать запрос, чтобы получить все таблицы из заданногобазы данных, например:

SHOW TABLES;

Или запросить все базы данных, подобные этой:

SHOW DATABASES;

Затем используйте это в качестве белого списка для ввода данных пользователем.Когда вы используете базы данных, целесообразно исключить некоторые системные базы данных, такие как mysql сама по себе и information_schema.

Другой вариант - отфильтровать ввод пользователя с помощью заданного регулярного выражения, например, если ваша таблица / база данныхимена - это только строки с подчеркиванием, которые вы можете использовать:

preg_match('/^[a-z_]+$/i', $userGivenTableName)

Это должно удалить любые потенциальные строки, содержащие инъекции SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...