安全な PHP-MySQL 接続のためのパラメータ化されたクエリ
SQL インジェクションは、Web アプリケーションに対する重大なセキュリティ脅威を表します。攻撃者は SQL クエリを操作することで、機密データに不正にアクセスしたり、データベース操作を妨害したりする可能性があります。パラメータ化されたクエリは、この脆弱性を軽減する効果的な対策を提供します。
MySQL を使用して PHP でパラメータ化されたクエリを準備する方法を示すログイン ページのコードのスニペットです。
<code class="php">$dbc = @mysqli_connect($dbhost, $dbuser, $dbpass, $db); // MySQL connection $userName = $_POST["username"]; $userPass = $_POST["password"]; $stmt = mysqli_prepare($dbc, "SELECT * FROM users WHERE username = ? AND password = ?"); mysqli_stmt_bind_param($stmt, "s", $userName); mysqli_stmt_bind_param($stmt, "s", $userPass); mysqli_stmt_execute($stmt); $row = mysqli_stmt_fetch($stmt); if (!$row) { echo "No existing user or wrong password."; }</code>
このコードmysqli_connect を使用して MySQL データベースへの接続を確立し、接続識別子を $dbc に割り当てます。 $userName 変数と $userPass 変数は、ログイン ページでユーザーが入力したユーザー名とパスワードを受け取ります。
mysqli_prepare 関数は、準備されたステートメントを初期化します。実行される SQL クエリは最初の引数として渡されます。この場合、ユーザー名とパスワードの両方が入力パラメーターに一致するすべての行を users テーブルから取得します。
次に、mysqli_stmt_bind_param を使用してユーザー提供の入力パラメーター $userName と $userPass をバインドします。準備されたステートメント内のプレースホルダー (?)。このコードでは、両方のパラメーターのデータ型が s (文字列) であることを指定しています。
mysqli_stmt_execute 関数は、準備されたステートメントを実行します。
最後に、mysqli_stmt_fetch は結果セットから最初の行を取得し、それを$row 変数。
このコードはパラメータ化されたクエリを使用することで、悪意のある SQL ステートメントが実行できないようにし、SQL インジェクション攻撃から保護します。
セキュリティを強化するには、暗号化することを強くお勧めします。または、ユーザーのパスワードをデータベースに保存する前にハッシュ化します。
以上がMySQL を使用した PHP のパラメータ化されたクエリは SQL インジェクション攻撃からどのように保護できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。