5

我看过很多关于 mysqli 的文章和问题,他们都声称它可以防止 sql 注入。但它是万无一失的,还是有办法绕过它。我对跨站点脚本或网络钓鱼攻击不感兴趣,只对 sql 注入感兴趣。

我应该首先说的是我正在使用准备好的语句。这就是我对mysqli的意思。如果我使用没有任何字符串连接的准备好的语句,那么它是万无一失的吗?

4

2 回答 2

15

但它是万无一失的,还是有办法绕过它。

不,你必须知道你在做什么。如果你使用绑定参数(MySqli 自带的一个特性),你完全可以免受来自这个攻击向量的注入类型攻击。这不会阻止您(程序员)直接嵌入字符串,从而启用注入攻击。您必须按预期使用该功能。

回复:编辑

我应该首先说的是我正在使用准备好的语句。这就是我对mysqli的意思。如果我使用没有任何字符串连接的准备好的语句,那么它是万无一失的吗?

万无一失仍然是一个危险的词。但是对于通过准备好的语句绑定的变量,您可以免受注入攻击。这是因为绑定参数与 SQL 查询分开传输。使用“传统”嵌入字符串方法,数据库服务器需要解析输入,并且其中有很多边缘情况(字符集等)。当数据和查询分开发送时,不会进行实际的解析(至少不会解析变量数据)。

于 2009-03-03T12:01:50.150 回答
0

它并没有比旧的 mysql 模块更好地防止 sql 注入,只是让开发人员更容易做到这一点,他们现在可以使用准备好的语句而不是调用 mysql_real_escape_string。

于 2009-03-03T12:00:15.943 回答