这里是小的伪样本:
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注入的风险,但是由于另外一些在第一个查询末尾会抛出错误,这是否限制了仅创建损坏表的风险?我是否正确理解了这一点,或者还有其他方法可以使我的查询更加混乱?