首頁 > 後端開發 > php教程 > SQL注入可以使用字元集操作來繞過`mysql_real_escape_string()`嗎?

SQL注入可以使用字元集操作來繞過`mysql_real_escape_string()`嗎?

Patricia Arquette
發布: 2024-12-25 00:00:19
原創
226 人瀏覽過

Can SQL Injection Bypass `mysql_real_escape_string()` Using Character Set Manipulation?

逃避 mysql_real_escape_string() 的 SQL 注入

儘管 mysql_real_escape_string() 被廣泛使用,但它並不能免受 SQL 注入攻擊。

攻擊

要求:資料庫連接必須使用易受攻擊的字元集,如big5、cp932、gb2312、gbk或sjis。

步驟:

  1. 設定編碼: 使用 SET NAMES 將伺服器編碼設定為易受攻擊的字元集。
  2. 建構有效負載: 建立一個包含無效多位元組字元(例如 0xbf27)的有效負載易受攻擊的字元集。
  3. 使用轉義mysql_real_escape_string(): 使用 mysql_real_escape_string() 轉義有效負載,這將在初始位元組前插入反斜線,即 0x27。
  4. 詢問資料庫: 在 a 中使用轉義的有效負載查詢。

結果:由於客戶端與伺服器編碼不匹配,查詢中包含未轉義的單引號,導致 SQL 注入成功。

醜陋的

mysql_real_escape_string() 中的錯誤: 中在早期的MySQL 版本中,即使客戶端知道連接字符編碼,無效的多字節字符也會被視為單字節以進行轉義。

PDO 漏洞: PDO 中的模擬準備語句是使用mysql_real_escape_string(),因此容易受到此攻擊。

保存Grace

安全做法:

  • 使用不易受攻擊的字元集,如 utf8 或 latin1。
  • 在兩者上正確設定字元集客戶端和伺服器。
  • 停用模擬準備好的語句PDO。

以上是SQL注入可以使用字元集操作來繞過`mysql_real_escape_string()`嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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