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