ホームページ > バックエンド開発 > PHPチュートリアル > SQL インジェクションを防ぐために PHP 変数を MySQL ステートメントに安全に挿入する方法

SQL インジェクションを防ぐために PHP 変数を MySQL ステートメントに安全に挿入する方法

Patricia Arquette
リリース: 2024-12-25 16:47:14
オリジナル
878 人が閲覧しました

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

MySQL ステートメントへの PHP 変数の挿入

MySQL ステートメントに PHP 変数を含める場合、データの整合性を確保し、データの整合性を確保するためのルールを理解することが不可欠です。潜在的なセキュリティ脆弱性。

1.データ リテラルにプリペアド ステートメントを使用する

内容: SQL データ リテラル (文字列または数値) を表すすべての PHP 変数は、プリペアド ステートメントを介して含める必要があります。

理由: プリペアド ステートメントは、SQL インジェクションを防止することでデータをサニタイズし、保護します。

方法:

  • SQL クエリ内の変数をプレースホルダーに置き換えます。
  • クエリを準備します。
  • 変数をプレースホルダーにバインドします。
  • query.

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";
ログイン後にコピー

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート