php - 通过添加第二个查询真的可以实现 SQL 注入(inject)吗?

标签 php mysql sql pdo sql-injection

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/

相关文章:

mysql - 获取用户的 DISTINCT id 并找到其列的 MAX,然后更新、LARAVEL

mysql - 改进单个结果行中的串联左连接查询

MySQL 在两个字母之间搜索

java - PHP PDO 批量更新 - 存在吗?

Apache 不加载 PHP MySQL 扩展,但 IIS 加载

php - 重新声明实例和静态函数

java - 为什么它说它是一个字符串?

mysql - 是否可以列出 MySQL 服务器关闭的连接?

mysql - 如何从表限制中选择每列相同值 X 结果

mysql - sql如何删除具有合并值的重复记录?