今天分享一篇在網站字符編碼"GBK"、"UTF-8"中可能遇到的SQL Injection問題,透過MYSQL中的寬字符注入與mysql_real_escape_string如何解決 ?
原文出處:https://www.leavesongs.com/PENETRATION/mutibyte-sql-inject.html
波波觀點:編碼問題會破壞安全假設
字元編碼與 SQL Injection 的關係,常見於應用程式、資料庫連線與資料庫本身對字元的理解不一致。若過濾函式在一種編碼下判斷安全,但資料庫用另一種方式解析,就可能產生繞過。
審計檢查
- 確認頁面、應用程式、資料庫連線與資料表使用一致編碼。
- 檢查是否依賴手寫 escaping,而不是 prepared statement。
- 注意歷史專案中的 GBK、Big5、latin1 與錯誤 charset 設定。
- 確認輸入過濾與資料庫查詢之間沒有二次解碼或轉碼。
防禦建議
最穩定的做法是統一使用 UTF-8/utf8mb4、正確設定資料庫連線編碼,並使用參數化查詢。若必須維護舊系統,應把編碼設定納入安全檢查表,而不是只看程式碼中的過濾函式。
在台灣或多語系網站中,歷史資料可能混有 Big5、UTF-8 與不同來源的內容。做安全測試與資料搬遷時,應特別注意轉碼錯誤是否造成資料截斷、驗證繞過或搜尋索引異常。












