SQL注入虽然使用绑定/准备语句?

时间:2013-01-11 02:09:46

标签: php mysqli bind sql-injection

除了阻止它的过程之外,我对SQL注入一无所知。

我想知道,如果攻击者会修改我准备好的声明:

$DB = $Con->prepare("SELECT * FROM Test WHERE username=?");

$DB->bind_param('s',$Username);

$DB->execute();

他进入的声明是:

x' DROP TABLE Test

bind / prepared语句如何处理此请求?

会返回错误还是继续?因为bind_param将特定值链接到所述SQL语句?

3 个答案:

答案 0 :(得分:1)

不,数据库只会查找用户名为x' DROP TABLE Test的记录,因此您最终可能会得到一个空的结果集。

答案 1 :(得分:0)

使用bind_param时,将为您转义值。你仍然应该验证数据,以确保它是正确的,但它是安全的注入

答案 2 :(得分:0)

准备好一份声明后,就会进行预编译。因此,绑定到它的任何参数都将作为原始数据发送,并且绝不能修改SQL语句。

您的示例可以正常工作,它会选择所有使用用户名x' DROP TABLE Test的行。