SQL パラメータ化クエリ: 疑問符の秘密
SQL の本を読んでいると、クエリで疑問符 (?) がよく使用されていることに気づくかもしれません。これらの疑問符は、プログラムでの動的 SQL 実行に広く使用されているパラメーター化されたクエリで重要な役割を果たします。
パラメータ化されたクエリでは、単純な文字列クエリの直接使用が回避されるため、セキュリティが強化され、SQL インジェクションの脆弱性が防止されます。これらはプレースホルダーとして機能し、クエリの実行時に動的に値が割り当てられます。
次の例を考えてみましょう:
<code>ODBCCommand cmd = new ODBCCommand("SELECT thingA FROM tableA WHERE thingB = ?") cmd.Parameters.Add(7) result = cmd.Execute()</code>
ここで、疑問符 (?) は、パラメーター 'thingB' に割り当てられる動的な値 7 のプレースホルダーとして機能します。この方法は、セキュリティの脆弱性を悪用する可能性のある悪意のある入力からシステムを保護します。
たとえば、ユーザーが次のような悪意のある入力を入力した場合:
<code>Robert'); DROP TABLE students; --</code>
パラメータ化されたクエリを使用する場合、ライブラリは入力をサニタイズし、結果は次のようになります:
<code>"SELECT * FROM students WHERE name = 'Robert''); DROP TABLE students; --'"</code>
攻撃者が悪意を持って実行するのを効果的に防ぎます。
MS SQL などの一部のデータベース管理システム (DBMS) は名前付きパラメータを使用し、読みやすさと明瞭さを向上させます。例:
<code>cmd.Text = "SELECT thingA FROM tableA WHERE thingB = @varname" cmd.Parameters.AddWithValue("@varname", 7) result = cmd.Execute()</code>
疑問符を含むパラメーター化されたクエリを使用するか、一部の DBMS で名前付きパラメーターを使用することにより、データベースをインジェクション攻撃から保護し、データの整合性を維持できます。
以上が疑問符を使用したパラメータ化されたクエリは SQL インジェクションをどのように防ぐのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。