Если два запроса mysql не могут быть выполнены в одном подготовленном выражении, следует ли мне беспокоиться о внедрении SQL? - PullRequest
0 голосов
/ 25 апреля 2019

Вот небольшой псевдосэмпл:

        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-инъекций, но, поскольку добавление какого-либо другого запроса в конце первого выдает ошибку, это ограничивает риск создания только поврежденной таблицы?Правильно ли я понял это или есть другие способы, как испортить мой запрос более серьезно?

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