SQL注入攻击-使用mySQLI_MULTI_QUERY()

我现在正在学习MySQL,它涉及的主题之一是处理用户输入时的安全问题--一个令人担忧的问题是注入攻击。我试图复制书中演示的攻击,如添加查询$query = "select * from temp_table; drop table temp_table,我使用了mysqli_query($connection,$query)。什么都没发生。我改为使用mysqli_multi_query(),发现它执行这两个语句。最后,我发现mysqli_query每次只运行一个查询。

我的问题是,如果我使用mysqli_query,从理论上讲,系统应该不会担心额外的语句注入攻击?或者,即使服务器正在使用mysqli_query

,用户仍可以通过任何其他方式运行其他语句

解决方案

确实,基本mysqli_query()将只运行一条语句。因此,您不必担心SQL注入攻击会诱使您的应用程序运行多条语句。

但一条语句可以包含子查询或SELECT... UNION SELECT...

一条语句可以读取它不打算读取的数据。或引发旨在使您的服务器不堪重负的拒绝服务攻击。

或者它可能只是一个错误,根本不是恶意攻击。

SELECT * FROM Users WHERE last_name = 'O'Reilly'; -- woops!

SQL注入的解决方案非常简单,很容易理解。我不明白为什么这么多开发人员找借口不写安全代码。

相关文章