PHP PDO защищает имя базы данных

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

0

Решение

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

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

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

SHOW TABLES;

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

SHOW DATABASES;

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

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

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]