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/
这是否回答了您的问题?
关于 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/
这是否回答了您的问题?