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