Binding参数如何阻止Sql注入?

时间:2016-05-25 12:09:54

标签: php sql sql-injection

在PHP中,我发现了一些防止Sql注入的方法。绑定参数就是其中之一。但我无法找到绑定参数如何实际阻止Sql注入的完整解释。我认为绑定参数只是节省了将不同数据绑定到同一个Sql语句的时间。如何预防Sql注入?

1 个答案:

答案 0 :(得分:4)

我认为简单示例会解释你的事情:

  "select * from myTable where name = " + condition;

假设用户输入为condition

  '123'; delete from myTable; commit;

然后发生了什么?执行的查询将是

  select * from myTable where name = '123'; delete from myTable; commit;

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

  select * from myTable where name = '123';
  delete from myTable; 
  commit;

如果是绑定变量

  "select * from myTable where name = @prmName"

无论用户输入什么,它都将一个且只有一个查询和上面的奇怪输入 将始终视为字符串,而不是部分的查询。结果将(很可能)是一个空光标,因为在name内没有myTable,如

  "'123'; delete from myTable; commit;"