將PHP 變數插入MySQL 語句
在MySQL 語句中包含PHP 變數時,必須了解規則以確保資料完整性並防止潛在的安全漏洞。
1.對資料文字使用預備語句
內容: 表示SQL 資料文字(字串或數字)的所有PHP 變數都必須包含在預準備語句中。
原因: 準備好的語句透過防止 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。查詢部分的白名單過濾
內容:表示其他查詢部分(關鍵字、識別碼)的變數必須透過允許值的「白名單」來篩選。
原因:為了防止惡意使用者註入未經授權的查詢部分或關鍵字。
如何:
範例:
$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中文網其他相關文章!