Вот небольшой псевдосэмпл:
SET @StA = CONCAT('CREATE TABLE hackTable
(id INT(10)
name VARCHAR(45)); SELECT * FROM hackTable;');
PREPARE statementA FROM @StA;
EXECUTE statementA;
DEALLOCATE PREPARE statementA;
Этот подготовленный оператор выдает ошибку 1064 (у вас ошибка в синтаксисе SQL ..).
Здесь: https://dev.mysql.com/doc/refman/8.0/en/prepare.html сказано, что:
... пользовательская переменная, которая содержит текст оператора SQL.Текст должен представлять один оператор, а не несколько операторов.
Если имя таблицы устанавливается динамически из пользовательского ввода (да, я читал много статей о таких методах, как экранирование, внесение в белый список и т. Д., Как предотвратитьАтаки SQL-инъекций.), Есть риски внедрения SQL-инъекций, но, поскольку добавление какого-либо другого запроса в конце первого выдает ошибку, это ограничивает риск создания только поврежденной таблицы?Правильно ли я понял это или есть другие способы, как испортить мой запрос более серьезно?