「mysqli_real_escape_string」可以完全防止 SQL 注入嗎?
考慮以下範例程式碼:
$email = mysqli_real_escape_string($db_con, $_POST['email']); $psw = mysqli_real_escape_string($db_con, $_POST['psw']); $query = "INSERT INTO `users` (`email`,`psw`) VALUES ('" . $email . "','" . $psw . "')";
此程式碼是否安全,可防止SQL 注入和其他攻擊
答案: 否。
如同提供的程式碼範例所強調的,「mysqli_real_escape_string」單獨不足以保證防止 SQL 注入。攻擊者可以利用其實現中的漏洞繞過過濾並危害應用程式。
建議解決方案:
防止 SQL 注入的最有效方法是使用準備好的陳述。準備好的語句將資料與 SQL 查詢隔離開來,確保外部輸入不會幹擾查詢結構。此外,請考慮實施嚴格的白名單,以專門針對其預期目的過濾資料。這種方法可以最大限度地降低 SQL 注入和其他安全漏洞的風險。
使用預準備語句的安全性查詢範例:
$stmt = $db->prepare( "SELECT * FROM table WHERE col = ? ORDER BY {$sortby} ASC LIMIT ?, ?" ); $stmt->execute(['value', $start, $howmany]); $data = $stmt->fetchAll(PDO::FETCH_ASSOC);
透過合併這些措施,您可以顯著增強 SQL 操作的安全性,抵禦惡意攻擊。
以上是`mysqli_real_escape_string` 是否提供針對 SQL 注入的完整保護?的詳細內容。更多資訊請關注PHP中文網其他相關文章!