MySQLi准备好的语句是否足以阻止SQL注入?

时间:2015-11-17 22:55:28

标签: php security mysqli prepared-statement sql-injection

已经问过一个兄弟问题here。我正在寻找特定于MySQLi扩展的透视图。

在链接的兄弟问题中,释义的结论是否定的, PDO 准备好的语句不足以防止SQL注入。某些边缘情况和PDO设置容易受到SQL注入攻击。

我的问题是, MySQLi 准备好的语句是否足以阻止SQL注入,或者是否还有某些我们需要更新才能完全安全的设置?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

预准备语句是服务器功能,而不是客户端库功能。每个用于PHP的mysql客户端库--pdo,mysql和mysqli - 都使用libmysqlclient库并依赖于它来获取功能。 PDO是唯一添加模拟预准备语句概念的库。

关于使用预准备语句的安全性的所有讨论均适用于所有客户端库。 (当PDO使用模拟的预处理语句并且您在gbk字符集中保存数据并且您在服务器和客户端库中不匹配字符集设置时(除了PDO之外)(顺便说一下,这也是针对addslashes的唯一已知弱点)。)

答案 1 :(得分:1)

是的,准备好的语句足以阻止SQL注入,但前提是你总是使用它们。

不,预备语句不足以阻止SQL注入,因为并非所有语句都是可参数化的,例如某些set命令,但是可以使用白名单和/或正则表达式来缓解这种情况。