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