利用無效多位元組字元繞過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中文網其他相關文章!