首頁 > 資料庫 > mysql教程 > PHP 和 MySQL 中的參數化查詢如何防範 SQL 注入攻擊?

PHP 和 MySQL 中的參數化查詢如何防範 SQL 注入攻擊?

Linda Hamilton
發布: 2024-10-28 19:03:02
原創
624 人瀏覽過

How can Parameterized Queries in PHP with MySQL protect against SQL Injection Attacks?

用於安全 PHP-MySQL 連接的參數化查詢

SQL 注入對 Web 應用程式構成嚴重的安全威脅。透過操縱 SQL 查詢,攻擊者可以獲得對敏感資料的未經授權的存取或破壞資料庫操作。參數化查詢提供了緩解此漏洞的有效對策。

以下是登入頁面中的一段程式碼,說明如何使用MySQL 在PHP 中準備參數化查詢:

<code class="php">$dbc = @mysqli_connect($dbhost, $dbuser, $dbpass, $db); // MySQL connection

$userName = $_POST["username"];
$userPass = $_POST["password"];

$stmt = mysqli_prepare($dbc, "SELECT * FROM users WHERE username = ? AND password = ?");
mysqli_stmt_bind_param($stmt, "s", $userName);
mysqli_stmt_bind_param($stmt, "s", $userPass);
mysqli_stmt_execute($stmt);
$row = mysqli_stmt_fetch($stmt);

if (!$row) {
    echo "No existing user or wrong password.";
}</code>
登入後複製

此程式碼使用mysqli_connect 建立與MySQL 資料庫的連接,並將連線標識符分配給$dbc。 $userName 和 $userPass 變數會接收使用者在登入頁面輸入的使用者名稱和密碼。

mysqli_prepare 函數初始化準備好的語句。將執行的 SQL 查詢作為第一個參數傳遞。在這種情況下,它會從使用者表中檢索使用者名稱和密碼與輸入參數相符的所有行。

接下來,mysqli_stmt_bind_param 用於將使用者提供的輸入參數 $userName 和 $userPass 綁定到準備好的語句中的佔位符 (?)。程式碼指定兩個參數都是資料型別 s(字串)。

mysqli_stmt_execute 函式執行準備好的語句。

最後,mysqli_stmt_fetch 從結果集中檢索第一行並將其指派給$row 變數。

透過使用參數化查詢,此程式碼可確保惡意 SQL 語句無法執行,從而防止 SQL 注入攻擊。

為了增加安全性,強烈建議加密或在將使用者密碼儲存到資料庫之前對其進行雜湊處理。

以上是PHP 和 MySQL 中的參數化查詢如何防範 SQL 注入攻擊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板