首頁 >後端開發 >php教程 >如何安全地將PHP變數插入MySQL語句以防止SQL注入?

如何安全地將PHP變數插入MySQL語句以防止SQL注入?

Patricia Arquette
Patricia Arquette原創
2024-12-25 16:47:14874瀏覽

How to Safely Insert PHP Variables into MySQL Statements to Prevent SQL Injection?

將PHP 變數插入MySQL 語句

在MySQL 語句中包含PHP 變數時,必須了解規則以確保資料完整性並防止潛在的安全漏洞。

1.對資料文字使用預備語句

內容: 表示SQL 資料文字(字串或數字)的所有PHP 變數都必須包含在預準備語句中。

原因: 準備好的語句透過防止 SQL 注入來清理和保護資料攻擊。

如何:

  • 在 SQL 查詢中用佔位符取代變數。
  • 準備查詢。
  • 將變數綁定到佔位符。
  • 執行

使用mysqli 的示例:

$type = 'testing';
$reporter = "John";
$sql = "INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("ss", $reporter, $description);
$stmt->execute();

如何使用PDO:

$type = 'testing';
$reporter = "John";
$sql = "INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)";
$stmt = $pdo->prepare($sql);
$stmt->execute([$reporter, $description]);

2。查詢部分的白名單過濾

內容:表示其他查詢部分(關鍵字、識別碼)的變數必須透過允許值的「白名單」來篩選。

原因:為了防止惡意使用者註入未經授權的查詢部分或關鍵字。

如何:

  • 建立允許值的清單。
  • 在將變數包含在查詢之前對照清單檢查變數.
  • 根據資料庫語法格式化識別碼(例如,反引號MySQL).

範例:

$orderby = $_GET['orderby'] ?: "name";
$allowed = ["name", "price", "qty"];
$key = array_search($orderby, $allowed, true);
if ($key === false) {
    throw new InvalidArgumentException("Invalid field name");
}
$query = "SELECT * FROM `table` ORDER BY `$orderby` $direction";

以上是如何安全地將PHP變數插入MySQL語句以防止SQL注入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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