MySQLi のパラメータ化されたクエリは、PHP アプリケーションを SQL インジェクションの脆弱性からどのように保護できますか?

Barbara Streisand
リリース: 2024-10-29 09:39:02
オリジナル
966 人が閲覧しました

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. ステートメントの準備: prepare メソッドは、SQL クエリを表すステートメント オブジェクトを初期化します。これには、後でバインドするパラメータのプレースホルダが含まれています。
  2. バインド パラメータ:bind_param メソッドは、ステートメント内のプレースホルダを実際のパラメータ値にリンクし、型の安全性を確保し、強制を防ぎます。
  3. ステートメントを実行します: 実行メソッドは、バインドされたパラメーターを使用して準備されたステートメントを実行し、結果セットを取得します。
  4. ステートメントを閉じる: 実行後、 close を使用して、ステートメント オブジェクトによって保持されているリソースを解放することが重要です。

追加のヒント

  • 提供する PDO (PHP Data Objects) の使用を検討してください。さまざまなデータベース システムを操作するための、より統合された一貫性のある API により、パラメータ化されたクエリの処理が簡素化されます。
  • 潜在的な悪意のある試みを軽減するために、常にユーザー入力を検証します。

以上がMySQLi のパラメータ化されたクエリは、PHP アプリケーションを SQL インジェクションの脆弱性からどのように保護できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!