绑定参数如何防止Sql注入?

Mit*_*ras 4 php sql sql-injection

在PHP中,我发现了一些防止Sql Injection的方法。绑定参数是其中之一。但是我无法找到有关绑定参数实际上如何防止Sql Injection的完整说明。我的想法是,将参数绑定不同的数据到同一个Sql语句中,绑定参数可以节省时间。如何防止Sql注入?

Dmi*_*nko 5

我认为一个简单的示例将向您解释这一点:

  "select * from myTable where name = " + condition;
Run Code Online (Sandbox Code Playgroud)

假设用户输入的condition

  '123'; delete from myTable; commit;
Run Code Online (Sandbox Code Playgroud)

那会发生什么呢?执行的查询将是

  select * from myTable where name = '123'; delete from myTable; commit;
Run Code Online (Sandbox Code Playgroud)

或实际上我们有三个具有灾难性后果的查询:

  select * from myTable where name = '123';
  delete from myTable; 
  commit;
Run Code Online (Sandbox Code Playgroud)

在绑定变量的情况下

  "select * from myTable where name = @prmName"
Run Code Online (Sandbox Code Playgroud)

无论用户输入什么内容,它将是一个且只有一个查询,上面的奇怪输入始终被视为字符串,而不是查询一部分。结果将是(最有可能)一个空指针,因为是没有name内小号myTable

  "'123'; delete from myTable; commit;"
Run Code Online (Sandbox Code Playgroud)