SQL 注入是駭客攻擊網站最常見手段之一。當應用程式未對用戶輸入進行嚴格驗證,直接拼接進 SQL 語句時,攻擊者可構造惡意輸入,改變 SQL 邏輯,導致數據洩露、篡改甚至刪除整庫數據。
// 假設用戶輸入:ilia'; DELETE FROM users; --
$name = "ilia'; DELETE FROM users;";
mysql_query("SELECT * FROM users WHERE name='{$name}'");
最終執行的 SQL 變為:
SELECT * FROM users WHERE name='ilia'; DELETE FROM users; --'
若資料庫支援多語句執行(如 SQLite、PostgreSQL),users 表所有記錄將被刪除。MySQL 的 mysql_query() 預設不支援多語句,因此較安全,但不可掉以輕心。
核心問題在於代碼與數據未分離:用戶輸入被視為 SQL 代碼的一部分參與解析。任何拼接字符串構建 SQL 的方式皆存在風險。
mysqli_real_escape_string、pg_escape_string)轉義特殊字符。SELECT、INSERT),禁止 DROP、DELETE 等高危操作。本系列將深入探討:
敬請期待後續內容,共同構建安全的 PHP 應用。