MySQL ステートメントへの PHP 変数の挿入
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";
以上がSQL インジェクションを防ぐために PHP 変数を MySQL ステートメントに安全に挿入する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。