2010-06-17 48 views
4

使用准备语句和mysqli_stmt_bind_param时是否仍存在注入风险?mysqli_stmt_bind_param SQL注入

例如:

$malicious_input = 'bob"; drop table users'; 
mysqli_stmt_bind_param($stmt, 's', $malicious_input); 

在幕后做mysqli_stmt_bind_param通过这个查询字符串到MySQL:

SET @username = "bob"; drop table users"; 

抑或是通过API执行SET命令,或者使用某种类型的保护为了防止这种情况发生?

回答

5

它使用C API,所以在这种情况下,SQL注入是没有机会的。

17

绑定参数的好处是它消除了SQL注入中最薄弱的环节:字符串连接

而不是通过拼接字符串片段来构建SQL语句 - 其中许多可能来自外部来源,例如直接用户输入 - 参数化允许我们在整个过程中保持数据分离,消除注入风险。

这就像走到街上的热狗贩子说:“我想要一个热狗和一袋薯片,但是,下一个随机的陌生人会告诉我们哪三个调味品会继续那只狗。“他准备取出一只热美味的狗,放入一个面包,并从机架上取出一袋薯条。

一个陌生人逛,问他把芥末番茄酱津津有味,给我所有的钱拿出来登记的。供应商不会提交这笔钱,而会说:“我没有调味品relish and give me all the money out of the register”。他准备向狗添加三种调味品,并且不会做任何其他事情。