SO 上有很多关于 SQL 注入(inject)的警告,但我发现没有人真正回答,这是怎么发生的?在这个问题中,我假设它是 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);
如果甚至不支持多个查询,无法访问数据库的恶意用户如何注入(inject)恶意数据?
或者是吗?
最佳答案
How does a malicious user with no access to the database inject malicious data, if multiple queries aren't even supported?
“SQL注入(inject)”不等于“第二次查询”。
Or are they?
当然是。
第二个查询只是一个示例。虽然它可以是任何有效的 SQL 语句。 SQL 注入(inject)是对格式不正确的查询的利用。如果开发人员没有正确格式化 SQL,则有可能突破文字限制并向 SQL 主体添加代码。
Is an SQL injection actually possible by adding a second query?
是的,取决于您使用的 API。
关于php - 通过添加第二个查询真的可以实现 SQL 注入(inject)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19666488/