我现在正在学习mysql,它涉及的主题之一是处理用户输入时的安全问题——其中一个问题是注入(inject)攻击。我尝试复制书中演示的攻击,例如添加查询 $query = "select * from temp_table; drop table temp_table
,我使用了 mysqli_query($connection,$query)
.什么也没发生。我改用mysqli_multi_query()
,发现它执行了两条语句。最后我发现mysqli_query
每次只运行一个查询。
我的问题是,如果我使用mysqli_query
,理论上来说,系统不应该担心额外的语句注入(inject)攻击吗?或者,即使服务器正在使用 mysqli_query ,用户仍然可以通过其他方式运行附加语句?
最佳答案
确实,基本的 mysqli_query()
只会运行一个语句。因此,您不必担心 SQL 注入(inject)攻击会欺骗您的应用程序运行多个语句。
但一个语句可以包含子查询或 SELECT...UNION SELECT...
。
一条语句可以读取它不打算读取的数据。或者引发大规模排序,以拒绝服务攻击的形式压垮您的服务器。
或者它可能只是一个错误,根本不是恶意攻击。
SELECT * FROM Users WHERE last_name = 'O'Reilly'; -- woops!
SQL 注入(inject)的解决方案非常简单且易于遵循。我不明白为什么这么多开发人员寻找借口不编写安全代码。
关于php - SQL注入(inject)攻击——使用mysqli_multi_query(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43566951/