0

除了阻止它的过程之外,我对 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 语句?

4

3 回答 3

1

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

于 2013-01-11T02:13:11.927 回答
0

使用 bind_param 时,将为您转义这些值。您仍然应该验证数据以确保它是正确的,但它不会被注入

于 2013-01-11T02:11:56.443 回答
0

一旦你准备了一个语句,它就会被预编译。因此,您绑定到它的任何参数都将作为原始数据发送,并且决不能修改 SQL 语句。

您的示例可以正常工作,它将选择所有带有 username 的行x' DROP TABLE Test

于 2013-01-11T02:15:09.240 回答