首頁  >  文章  >  資料庫  >  PHP 中的參數化查詢如何防止 SQL 注入?

PHP 中的參數化查詢如何防止 SQL 注入?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-28 06:00:03873瀏覽

How do Parameterized Queries in PHP Protect Against SQL Injection?

使用 MySQL 連線進行 PHP 參數化查詢

在 Web 開發領域,SQL 注入構成了重大的安全威脅。透過編造惡意查詢,攻擊者可以繞過身份驗證機制並存取敏感資料。參數化查詢為此漏洞提供了萬無一失的解決方案。

讓我們考慮PHP 登入頁面中的一段程式碼,程式碼片段無法防範SQL 注入:

<code class="php">$userName = $_POST["username"];
$userPass = $_POST["password"];

$query = "SELECT * FROM users WHERE username = '$userName' AND password = '$userPass'";

$result = mysqli_query($dbc, $query);
$row = mysqli_fetch_array($result);

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

要使用參數化查詢,我們需要建立與資料庫的連接並準備參數化語句。以下程式碼提供了修改後的範例:

<code class="php">$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);</code>

以下是程式碼細分:

  • mysqli_prepare() 準備一個參數化語句,其中包含代表參數的佔位符(?)。
  • mysqli_stmt_bind_param() 將值綁定到佔位符參數。
  • mysqli_stmt_execute() 執行參數化語句。
  • mysqli_stmt_fetch() 檢索結果行。

在此參數化查詢中,佔位符可防止注入惡意輸入,因為它們被綁定值取代。此外,為了增強安全性,必須對密碼進行加密或雜湊處理,避免儲存明文密碼。透過採用參數化查詢,PHP 開發人員可以有效保護其 Web 應用程式免受 SQL 注入攻擊。

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

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