php - Binding参数如何防止Sql注入(inject)?

标签 php sql sql-injection

<分区>

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

最佳答案

我想一个简单的例子会解释你的事情:

  "select * from myTable where name = " + 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;

在绑定(bind)变量的情况下

  "select * from myTable where name = @prmName"

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

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

关于php - Binding参数如何防止Sql注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37436694/

相关文章:

php - preg_split 和多种模式

JavaScript 循环每 30 秒调用一个不同的函数

php - Mac OSX 10.8 PHP MySQL

MySQL 双左外连接

mysql - 用户定义函数 MySQL Workbench

php - SQL 查询中的 sprintf( '%d' , $tainted ) 是漏洞吗?

php - MySQL + CodeIgniter + 点击跟踪唯一点击次数和总点击次数

sql - 在我的例子中,如何使用 SQL Server 将列记录放入行中?

mysql - Codeigniter - Active Records 是否容易受到 SQL 注入(inject)攻击?

php - PHP mysql_real_escape_string() 保护数据库名称吗?