ホームページ >データベース >mysql チュートリアル >パラメータ化されたクエリは SQL インジェクションからどのように保護されますか?
安全なデータベース相互作用のためのパラメータ化されたクエリの使用
SQL インジェクションは依然として重大なセキュリティ上の脅威であり、攻撃者がユーザーが送信した入力を使用して悪意のあるクエリを実行することを可能にします。 。 Web サイトを保護するために、パラメーター化されたクエリは堅牢なソリューションを提供します。ただし、それらを統合するには、適切なデータベース接続処理が必要です。
次のログイン ページ コードの例を考えてみましょう:
<code class="php">$userName = $_POST["username"]; $userPass = $_POST["password"]; $query = "SELECT * FROM users WHERE username = '$userName' AND password = '$userPass'"; $result = mysqli_query($dbc, $query); //$dbc is for MySQL connection: $dbc = @mysqli_connect($dbhost, $dbuser, $dbpass, $db) $row = mysqli_fetch_array($result); if(!$row){ echo "No existing user or wrong password."; }</code>
パラメータ化されたクエリの実装:
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_connect() を使用して確立されます。これはクエリを実行する前に行う必要があります。続行する前に、有効な $dbc があることを確認してください。
セキュリティのベスト プラクティス:
以上がパラメータ化されたクエリは SQL インジェクションからどのように保護されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。