ホームページ >データベース >mysql チュートリアル >テキストボックス コメントを含む INSERT ステートメントでの SQL インジェクションを防ぐにはどうすればよいですか?
テキストボックス コメントを含む INSERT ステートメントでの SQL インジェクションの防止
SQL インジェクションの脆弱性は、処理されない場合、INSERT ステートメントを含むすべての SQL ステートメントで発生する可能性があります。
INSERT ステートメントのコンテキストでは、SQL インジェクション攻撃が発生する可能性があります。ユーザーがテキスト ボックスに入力したコメントなど、信頼できない入力は、適切なサニタイズや検証を行わずに SQL クエリに直接連結されます。
SQL インジェクション攻撃の例
整数 ID とコメント文字列の 2 つのフィールドを持つ簡略化されたコメント テーブルを考えてみましょう。新しいコメントを追加する INSERT ステートメントは次のようになります:
INSERT INTO COMMENTS VALUES(122, 'I like this website');
ただし、悪意のあるユーザーが次のコメントを入力した場合:
'); DELETE FROM users; --
SQL ステートメントは、何も処理されず、
INSERT INTO COMMENTS VALUES(123, ''); DELETE FROM users; -- ');
これにより、ユーザーはコメントを追加するだけでなく、すべてのレコードを削除する悪意のある SQL コマンドを実行することになります。
SQL インジェクションに対する保護
SQL インジェクション攻撃を防ぐには、パラメーター化された SQL ステートメントを使用することが不可欠です。これらのステートメントは信頼できない入力のプレースホルダーを使用し、データベースは SQL クエリへの入力の挿入を自動的に処理します。
.NET 2.0 では、SqlCommand クラスを使用してパラメーター化された SQL ステートメントを実行できます。たとえば、次のコードはパラメータ化された SQL ステートメントを使用してコメントを挿入します。
using (SqlConnection connection = new SqlConnection("connectionString")) { connection.Open(); using (SqlCommand command = new SqlCommand("INSERT INTO COMMENTS VALUES (@Id, @Comment)", connection)) { command.Parameters.AddWithValue("@Id", 123); command.Parameters.AddWithValue("@Comment", comment); command.ExecuteNonQuery(); } }
パラメータ化された SQL ステートメントを使用することで、悪意のある入力が安全に処理され、SQL インジェクション攻撃を効果的に防止できます。データベースの整合性に影響します。
以上がテキストボックス コメントを含む INSERT ステートメントでの SQL インジェクションを防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。