这是查看SQL预准备语句的正确方法吗?

时间:2019-04-30 20:50:26

标签: sql

我正在尝试寻找确认信息,以了解我理解SQL预准备语句的方式是否正确。

如果我理解正确,那是您将用户的输入与语句本身分开。您不是将输入视为语句的一部分,也不是在相同的 context 下。对于SQL注入,上下文是一个字符串。该语句是一个长字符串,您可以允许用户输入他们想要的内容作为输入,然后该输入便成为该语句的一部分。

因此,改为在其位置放置一些参数名称,然后将SQL语句保存在某处以供以后使用。该参数不是字符串,而是一些指向数据的“对象”。然后,如果您想传递类似'' or '1' ='1'的内容,则该参数以 string 的形式指向该值。因此,如果您将两者进行比较:

输入被附加到语句

delete from t where 'hello'='' or '1' = '1'; // will delete t``

输入被语句中的某个参数指向

  1. 创建语句。这将作为语句而不是字符串存储在某个地方。

delete* from t where password=$somepassword;

where password=$somepassword求值时,$ somepassword替换为它指向的字符串。然后我们有这样的声明:

delete * from t where password='' or '1'='1'; //它不会通过,因为除字符串之外的所有内容都是语句。该字符串不是语句本身的一部分。由于任何字符串都不会被视为语句的一部分,因此不会发生SQL注入。

0 个答案:

没有答案