关于SO的许多答案谈论SQL注入和针对它的补救措施,这对我来说很清楚。他们中的大多数人都没有触摸(或者我可能无法理解)实际上是如何将恶意SQL注入到查询中。
这是我的困惑。
假设一个例子:php + pdo(或mysqli)+ Mysql。代码:
$sql = "select SomeName from SomeTable where SomeNameId = $neededId";
$pdoInstance->query($sql);
如果我理解正确,要将一些恶意代码附加到$neededId
变量,攻击者需要知道$neededId
变量的存在。但要找出变量名称,攻击者必须超越PHP解释器,我认为这很简单。
有人可以澄清吗?
答案 0 :(得分:1)
你是对的,攻击者必须猜猜桌子的名字。 例如:
$neededId = "0; DELETE FROM tblUser;"
select SomeName from SomeTable where SomeNameId = $neededId
如果这不起作用,请尝试下一个tablename:tblCustomer,tblcontact等等。
你只是不希望这是可能的。
编辑:如果您正在构建一些着名的开源框架,人们甚至不必猜测表名,他们可以查找它们。
OP问道:“攻击者如何从tblUser中删除blah-blah到$ neededId变量?”
这很容易。您的数据来自表单。一个HTML表单。你可以把任何东西放在帖子里面。它不可信任。
您可以通过构建自己的HTML表单来实现,或者在网页本身上使用它,例如: https://addons.mozilla.org/en-US/firefox/addon/tamper-data/
这会回答你的询问吗?