我看过很多关于 mysqli 的文章和问题,他们都声称它可以防止 sql 注入。但它是万无一失的,还是有办法绕过它。我对跨站点脚本或网络钓鱼攻击不感兴趣,只对 sql 注入感兴趣。
我应该首先说的是我正在使用准备好的语句。这就是我对mysqli的意思。如果我使用没有任何字符串连接的准备好的语句,那么它是万无一失的吗?
我看过很多关于 mysqli 的文章和问题,他们都声称它可以防止 sql 注入。但它是万无一失的,还是有办法绕过它。我对跨站点脚本或网络钓鱼攻击不感兴趣,只对 sql 注入感兴趣。
我应该首先说的是我正在使用准备好的语句。这就是我对mysqli的意思。如果我使用没有任何字符串连接的准备好的语句,那么它是万无一失的吗?
但它是万无一失的,还是有办法绕过它。
不,你必须知道你在做什么。如果你使用绑定参数(MySqli 自带的一个特性),你完全可以免受来自这个攻击向量的注入类型攻击。这不会阻止您(程序员)直接嵌入字符串,从而启用注入攻击。您必须按预期使用该功能。
我应该首先说的是我正在使用准备好的语句。这就是我对mysqli的意思。如果我使用没有任何字符串连接的准备好的语句,那么它是万无一失的吗?
万无一失仍然是一个危险的词。但是对于通过准备好的语句绑定的变量,您可以免受注入攻击。这是因为绑定参数与 SQL 查询分开传输。使用“传统”嵌入字符串方法,数据库服务器需要解析输入,并且其中有很多边缘情况(字符集等)。当数据和查询分开发送时,不会进行实际的解析(至少不会解析变量数据)。
它并没有比旧的 mysql 模块更好地防止 sql 注入,只是让开发人员更容易做到这一点,他们现在可以使用准备好的语句而不是调用 mysql_real_escape_string。