首頁 > 資料庫 > mysql教程 > SQL注入如何繞過`mysql_real_escape_string()`?

SQL注入如何繞過`mysql_real_escape_string()`?

Susan Sarandon
發布: 2025-01-25 21:27:10
原創
640 人瀏覽過

How Can SQL Injection Bypass `mysql_real_escape_string()`?

利用無效多位元組字元繞過mysql_real_escape_string()函式進行SQL注入

即使使用了mysql_real_escape_string()函數,仍然可能發生SQL注入。以下步驟示範如何繞過函數:

  1. 設定伺服器字元集為易受攻擊的編碼:

    <code class="language-sql">mysql_query('SET NAMES gbk');</code>
    登入後複製
  2. 建構包含無效多位元組字元的攻擊負荷:

    <code class="language-php">$var = mysql_real_escape_string("\xbf\x27 OR 1=1 /*");</code>
    登入後複製
  3. 使用未轉義的攻擊負荷執行查詢:

    <code class="language-sql">mysql_query("SELECT * FROM test WHERE name = '$var' LIMIT 1");</code>
    登入後複製

mysql_real_escape_string()函數的轉義操作依賴於目前使用的字元集。然而,在這個例子中,連接使用了易受攻擊的字元集(例如gbk),允許創建無效的多位元組字元。因此,注入載重沒有被正確轉義,導致注入攻擊成功。

安全措施

為了防止此類注入攻擊,請務必採取以下措施:

  • 使用安全的字元集: 選擇不易受攻擊的字元集,例如utf8或latin1。
  • 啟用NO_BACKSLASH_ESCAPES SQL模式: 這將防止在轉義過程中建立無效字元。
  • 使用PDO並停用模擬預處理語句: PDO提供真正的預處理語句,防止潛在的注入漏洞。
  • 使用較新版本的MySQL (5.1或更高版本): 這些版本修正了允許上述注入攻擊的漏洞。

以上是SQL注入如何繞過`mysql_real_escape_string()`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板