PHP中的mysqli类是否能100%防止SQL注入攻击?

5

我看到很多关于mysqli的文章和问题,它们都声称可以防止sql注入。但是它是否百分之百可靠,还是有一些方法可以绕过它。我不关心跨站脚本或网络钓鱼攻击,只关心sql注入。

我一开始应该说的是,我正在使用预处理语句。这就是我所说的mysqli。如果我在没有任何字符串连接的情况下使用预处理语句,那么它是否百分之百可靠?

2个回答

15

但它是否毫无漏洞,或者还有什么方法可以绕过它呢。

不是的,你必须知道你在做什么。如果使用绑定参数(MySqli提供的一个功能),则完全可以从这种攻击向量中完全安全地防止注入类型攻击。这不能阻止程序员直接嵌入字符串,从而使注入攻击成为可能。你必须按照设计意图使用该功能。

关于编辑

我一开始应该说的是我正在使用准备好的语句(prepared statements)。那么,如果我使用准备好的语句而没有任何字符串拼接,那么它就是绝对安全的吗?

“绝对安全”仍然是一个非常危险的词。但是,通过准备好的语句绑定变量,你可以避免注入攻击。这是因为绑定参数与 SQL 查询分开传输。采用“传统”的嵌入字符串方法时,数据库服务器需要解析输入,这其中存在许多边缘情况(字符集等)。当数据和查询分别发送时,实际上不存在解析(至少不解析变量数据)。


0

它并不能比旧的mysql模块更好地防止SQL注入,只是让开发者更容易做到这一点,现在可以使用预处理语句而不是调用mysql_real_escape_string。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接