【发布时间】:2026-01-19 04:00:01
【问题描述】:
在 SO 上有很多关于 SQL 注入的警告,但我发现没有人不真的回答,这是怎么发生的?在这个问题中,我假设它是 MySQL 和 PHP。
基本的 mysql_ 不接受查询中的第二个查询,对吧?
所以,基本上,这个
$unsafe = "');DROP TABLE table;--";
mysqli_query($con,"INSERT INTO table (Column) VALUES ('$unsafe'");
实际上并没有做任何有害的事情吗?请纠正我。
我没有使用 mysqli_ 的经验,所以我会跳到 PDO 和“准备好的语句”。
当我开始使用 PDO 时,我缺乏这方面的信息,并且基本上是这样使用它,认为它是安全的。
$stm = $pdo->prepare("INSERT INTO table (Column) VALUES ('$unsafe');
$stm->execute();
但是,PDO 与 mysql_ 相同。它不支持开箱即用的多个查询,对吗?再次,纠正我这一点。
那么,如果我没记错的话,这被认为是安全的?
$stm = $pdo->prepare("INSERT INTO table (Column) VALUES (?);
$stm->execute(array($unsafe);
如果甚至不支持多个查询,无权访问数据库的恶意用户如何注入恶意数据?
还是他们?
【问题讨论】:
-
这是Software Engineering的问题
-
@FreshPrinceOfSO 随意标记它以进行迁移。
-
您的示例没有生成有效的 SQL
-
这不仅仅是多个查询,正如您已经研究过的那样,默认情况下确实禁用了多个查询。在您的 INSERT 请求的情况下,
$unsafe中精心设计的字符串连接表达式和 SELECT 子查询可能是攻击者揭开数据库内容所需的全部内容。
标签: php mysql sql pdo sql-injection