MySQL 注入和字元轉義
使用MySQL API 中的mysql_real_escape_string() 函數時,必須確保所有易受攻擊的字元被攻擊的字元轉義以防止SQL 注入。 MySQL 文件規定以下字符需要轉義:
<pre class="brush:php;toolbar:false">0x00 : "\0", 0x08 : "\b", 0x09 : "\t", 0x1a : "\Z", 0x22 : '\"', 0x25 : "\%", 0x27 : "\'", 0x5c : "\\", 0x5f : "\_",
但是,將此列表與ESAPI 的Python 端口進行比較,發現需要轉義的其他字符,包括:
SELECT a FROM b WHERE c = '...user input ...';
出現關於轉義退格鍵(b) 和製表符(t) 字元的必要性。
解決查詢
"\bDELETE_MY_DATABASE"
當使用者輸入包含製表符或退格鍵時字符,可能會帶來安全風險。考慮這樣一個場景,惡意行為者在使用者輸入末尾包含以下內容:
傳遞到資料庫時,退格字元將刪除前面的單引號,從而導致執行惡意DELETE
ESAPI 安全庫
由於潛在的安全問題,ESAPI 安全庫合併了退格鍵和製表符以進行轉義:
結論
因此,在處理 MySQL 查詢中的使用者輸入時,建議謹慎並轉義 ESAPI 安全庫中指定的所有字元。雖然退格鍵和製表符等特定字元本身看起來並不危險,但它們與其他機制結合使用可能會造成重大安全威脅。
以上是為什麼要在 MySQL 查詢中轉義退格鍵和製表符?的詳細內容。更多資訊請關注PHP中文網其他相關文章!