SQL注入:机制

SQL injection: mechanism

关于 SO 的许多答案都谈到了 SQL 注入和针对它的补救措施,这对我来说很清楚。他们中的大多数人没有触及(或者我可能不明白)的是恶意 SQL 是如何注入到查询中的。

这是我的困惑。

假设一个例子:php + pdo(或mysqli)+ Mysql。代码:

$sql = "select SomeName from SomeTable where SomeNameId = $neededId"; $pdoInstance->query($sql);

如果我没理解错的话,要将一些恶意代码附加到 $neededId 变量,攻击者需要知道 $neededId 变量的存在。但是要找出变量名,攻击者必须超越 php 解释器,我认为这并不容易。

有人可以澄清一下吗?

你是对的,攻击者可能必须猜出 table 的名字。 例如:

$neededId = "0; DELETE FROM tblUser;"

select SomeName from SomeTable where SomeNameId = $neededId

如果这不起作用,请尝试下一个 table名称:tblCustomer、tblcontact 等

你只是不希望那成为可能。

编辑:如果您正在构建一些著名的开源框架,人们甚至不必猜测 table 名称,他们可以查找它们。

OP 问:"how an attacker can inject delete blah-blah from tblUser into the $neededId variable?"

这很容易。您的数据来自表格。 HTML 表格。您可以在 post 中放入任何内容。它不能被信任。

您可以通过构建自己的 HTML 表单来实现,或者在网页本身上使用它,例如: https://addons.mozilla.org/en-US/firefox/addon/tamper-data/

这是否回答了您的问题?