ホームページ > データベース > mysql チュートリアル > 疑問符を使用したパラメータ化されたクエリは SQL インジェクションをどのように防ぐのでしょうか?

疑問符を使用したパラメータ化されたクエリは SQL インジェクションをどのように防ぐのでしょうか?

DDD
リリース: 2025-01-09 21:26:43
オリジナル
275 人が閲覧しました

How Do Parameterized Queries Using Question Marks Prevent SQL Injection?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート