轉義資料庫插入的MySQL 特殊字元
將使用者輸入插入MySQL 資料庫時,透過正確轉義特殊字元來防止潛在漏洞至關重要人物。 PHP 函數 mysql_real_escape_string 可以有效處理此任務,但它不會轉義 MySQL 通配符 % 和 _。
為了解決這個問題,許多開發人員將 addcslashes 函數與 mysql_real_escape_string 結合使用來轉義這些通配符。然而,這種方法可能會導致意想不到的結果。
了解 MySQL 中的通配符轉義
與普遍看法相反,在 MySQL 中,_ 和 % 不被視為通用字串的通配符文字。它們僅應在 LIKE 語句中用於模式匹配時進行轉義。
轉義的層次結構
在LIKE 語句上下文中轉義特殊字元涉及兩個層級:
雙反斜線的混亂
MySQL 使用反斜線字元作為 LIKE 轉義和字串的轉義字元字面上的逃避。這可能會導致混亂,如插入包含 % 的字串時所見。必須使用雙反斜線對其進行轉義以實現 LIKE 目的,然後必須再次對整個字串進行轉義以進行字串文字插入。
ANSI SQL 與可移植LIKE 轉義
ANSI SQL 定義字串文字中的反斜線代表文字反斜杠,單引號使用'' 進行轉義。然而,MySQL 偏離了這個標準。為了確保可移植性,建議覆寫 MySQL 的預設行為並使用 LIKE ... ESCAPE ... 建構指定自訂轉義字元。例如:
function like($s, $e) { return str_replace(array($e, '_', '%'), array($e.$e, $e.'_', $e.'%'), $s); } $escapedname = mysql_real_escape_string(like($name, '=')); $query = "... WHERE name LIKE '%$escapedname%' ESCAPE '=' AND ...";
以上是如何安全地轉義 MySQL 特殊字元(包括通配符)以進行資料庫插入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!