2017-04-23 127 views
0

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

我的问题是,如果我用mysqli_query,从理论上讲,系统不应该担心额外的语句注入攻击吗?或者,即使服务器正在使用mysqli_query,用户仍然可以运行其他任何方式?

感谢您的帮助和建议!

+0

“系统不应该担心额外的语句注入攻击?” ---这是正确的。这就是关于“小桌子”的漫画是乌托邦式的原因。 – zerkms

+0

请阅读此答案:http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php –

+0

非常感谢你! :) – ming

回答

1

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

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

一条语句可以读取它不打算读取的数据。或者造成一种意图将服务器压制成拒绝服务攻击的巨大排序。或者它可能只是一个错误,而不是恶意攻击。

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

SQL注入的解决方案非常简单,易于遵循。我不明白为什么这么多开发人员会寻找不要编写安全代码的借口。

+0

谢谢!得到它了! :) – ming

+0

当你的语句是select * from用户,其中loginID ='blah'和password ='blah''并且用户输入'blah'或者1 = 1'时,你也可以创建问题 –