首頁  >  文章  >  後端開發  >  MySQLi 中的參數化查詢如何保護 PHP 應用程式免受 SQL 注入漏洞的影響?

MySQLi 中的參數化查詢如何保護 PHP 應用程式免受 SQL 注入漏洞的影響?

Barbara Streisand
Barbara Streisand原創
2024-10-29 09:39:02968瀏覽

How can parameterized queries in MySQLi protect PHP applications from SQL injection vulnerabilities?

利用MySQLi 中的參數進行高效、安全的查詢

在PHP 資料庫程式設計領域,透過透過MySQLi 介面使用MySQL 時,查詢涉及動態參數的場景是很常見的。考慮以下範例:

SELECT $fields FROM $table WHERE $this = $that AND $this2 = $that2

要透過將值插入SQL 字串來手動建立此類查詢,您可以執行以下操作:

$search = array('name' => 'michael', 'age' => 20);
$query = "SELECT $fields FROM $table WHERE name = '$search[name]' AND age = '$search[age]'";

但是,這種方法會引起以下問題SQL注入漏洞。為了解決這個問題,MySQLi 提供了使用參數化查詢的強大解決方案。

參數化查詢的強大功能

參數化查詢可讓您獨立於 SQL 語句本身傳遞查詢參數。這可以防止利用使用者輸入的惡意程式碼執行,從而顯著增強安全性。上述範例的參數化查詢如下圖所示:

$db = new mysqli(...);
$name = 'michael';
$age = 20;

$stmt = $db->prepare("SELECT $fields FROm $table WHERE name = ? AND age = ?");
$stmt->bind_param("si", $name, $age);
$stmt->execute();
$stmt->close();

詳細說明

  1. 準備語句:準備方法初始化一個表示SQL 查詢的語句物件。它包含稍後要綁定的參數的佔位符。
  2. 綁定參數:bind_param 方法將語句中的佔位符與實際參數值連結起來,確保型別安全並防止強制轉換。
  3. 執行語句:execute方法使用綁定的參數執行準備好的語句,擷取結果集。
  4. 關閉語句:執行後,使用 close 釋放語句物件所持有的資源至關重要。

其他提示

  • 考慮使用PDO(PHP 資料物件),它提供了更統一、一致的API,用於處理不同的資料庫系統,簡化參數化查詢處理。
  • 始終驗證使用者輸入以減少潛在的惡意嘗試。

以上是MySQLi 中的參數化查詢如何保護 PHP 應用程式免受 SQL 注入漏洞的影響?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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