首頁 >後端開發 >php教程 >`mysqli_real_escape_string` 是否提供針對 SQL 注入的完整保護?

`mysqli_real_escape_string` 是否提供針對 SQL 注入的完整保護?

Linda Hamilton
Linda Hamilton原創
2024-12-20 03:02:13642瀏覽

Does `mysqli_real_escape_string` Offer Complete Protection Against SQL Injection?

「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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn