可以对损坏的查询执行SQL注入吗?

时间:2018-12-21 04:32:21

标签: mysql sql-injection

是否可以执行SQL注入来查找有关MySQL数据库的数据,而原始查询中的表不存在?

例如,在PHP中考虑以下查询:

mysqli_multi_query("INSERT INTO users (id, email_address) VALUES (NULL, '$email');");

如果表users不存在,是否仍可以执行注入?我可以看到的主要问题是,如果我尝试注入如下内容,整个查询操作将引发错误:

'); SHOW TABLES; --

这对我的教育来说,比实际使用的东西要多。有什么想法吗?

1 个答案:

答案 0 :(得分:7)

即使表确实存在,也不会进行SQL注入。 mysql_query()不会执行多个查询,因此注入;来启动第二个查询将不起作用。大多数其他MySQL API都是类似的-您必须使用mysqli_multi_query()之类的东西才能在一个调用中执行多个查询。

但是,如果第一个查询由于某种原因失败,则将不会执行以下任何查询。因此,在您的示例中,如果没有user表,则无法将其插入。

但是,这不是很有趣。 SQL注入通常是对正常工作的查询执行的,除了不能适当地防止注入。因此,在任何情况下都不会插入正在访问不存在的表的查询。