gpt4 book ai didi

php - MySQL注入(inject)查询

转载 作者:行者123 更新时间:2023-11-29 01:30:37 26 4
gpt4 key购买 nike

我熟悉准备好的语句,我知道它们是防止 MySQL 注入(inject)的最佳实践。但我想知道这个 PHP/MySQL 语句怎么会面临注入(inject)攻击的风险:

$result = mysqli_query($db,"SELECT name FROM users WHERE id = '".$_POST['name']."';");

在我看来,用户的输入应该包含在单引号内。能否在一条 mysqli_query 语句中执行多个查询?

另外,让上述安全变得如此简单......

$result = mysqli_query($db,"SELECT name FROM users WHERE id = '".mysqli_real_escape_string($_POST['name'])."';");

最佳答案

It seems to me like the input from the user would be contained inside the single quotes

除非您在张贴的 name 中包含单引号,否则它会允许您断开引号。例如,将名称发布为:

' or 1 or '

WHERE 子句变为:

WHERE id = '' or 1 or '';

由于 or 1 部分,这将匹配并检索表中的所有行。如您所见,它从引号中跳出以注入(inject)一些 SQL,然后返回到引号中以使查询有效。

Can you execute more than one query in one mysqli_query statement?

不,但是如果它是用 mysqli_multi_query 执行的,那么是的,你可以在最后添加多个查询。

is making the above safe just as easy as mysqli_real_escape_string?

通常是的,但 Prepared Statement 会更好。使用转义,WHERE 子句将变为(使用我上面的示例):

WHERE id = '\' or 1 or \'';

这不再容易受到攻击,因为引号不能被分解,并且只有在 name 字面上匹配 ' 或 1 或 ' 时才会匹配行显然不太可能。

关于php - MySQL注入(inject)查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14323078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com