ホームページ  >  記事  >  データベース  >  PHP のパラメータ化されたクエリは、MySQL データベースでの SQL インジェクションからどのように保護できますか?

PHP のパラメータ化されたクエリは、MySQL データベースでの SQL インジェクションからどのように保護できますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-02 07:07:30343ブラウズ

How can Parameterized Queries in PHP Protect against SQL Injection in MySQL Databases?

安全な MySQL 接続のための PHP のパラメータ化されたクエリ

SQL インジェクションは依然として永続的なセキュリティ脅威であり、データベース アプリケーション内の機密データを侵害する可能性があります。パラメータ化されたクエリは、このリスクを軽減するための重要な手法です。ただし、これらを正しく実装するには、クエリ自体だけでなくデータベース接続プロセスについても理解する必要があります。

PHP ログイン ページの次のコード スニペットを考えてみましょう。

<code class="php">$query = "SELECT * FROM users WHERE username = '$userName' AND password = '$userPass'";
$result = mysqli_query($dbc, $query);
$row = mysqli_fetch_array($result);</code>

このコードは次の脆弱性があります。ユーザー指定の入力 $userName と $userPass がクエリ文字列に直接含まれているため、SQL インジェクションが行われます。

パラメータ化されたクエリを実装するには、このコードを次のものに置き換えます。

<code class="php">$stmt = mysqli_prepare($dbc, "SELECT * FROM users WHERE username = ? AND password = ?");
mysqli_stmt_bind_param($stmt, "ss", $userName, $userPass);
mysqli_stmt_execute($stmt);
$row = mysqli_stmt_fetch($stmt);</code>

この中で改善されたコード:

  • mysqli_prepare は、複数回実行できる PDO ステートメント オブジェクトを準備します。
  • mysqli_stmt_bind_param は、ユーザー指定の入力を SQL クエリ内のパラメーター化されたプレースホルダー (?) にバインドし、 SQL インジェクション。
  • mysqli_stmt_execute は、準備されたステートメントを実行します。
  • mysqli_stmt_fetch は、結果の行を取得します。

セキュリティを強化するために、ユーザー パスワードを暗号化またはハッシュすることを忘れないでください。パラメーター化されたクエリとこれらの追加対策により、PHP アプリケーションでの MySQL データベースの安全な相互作用が保証されます。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。