SQL LIKE ステートメントでのパラメーターの使用
検索関数を作成するときは、SQL インジェクションの脅威から保護するためにパラメーターを使用することが不可欠です。ただし、次のクエリで示されるように、LIKE ステートメントでパラメータを使用すると問題が発生する可能性があります。
SELECT * FROM compliance_corner WHERE (body LIKE '%@query%') OR (title LIKE '%@query%')
このクエリは、パラメータが適切にサニタイズされていないため、SQL インジェクションの影響を受けやすくなります。この問題を修正するには、パラメータを適切に定義し、次のような値を使用して割り当てる必要があります。
Dim cmd as New SqlCommand( "SELECT * FROM compliance_corner"_ + " WHERE (body LIKE @query )"_ + " OR (title LIKE @query)") cmd.Parameters.Add("@query", "%" +searchString +"%")
この例では、パラメータ @query は searchString の値を使用して定義されています。これにより、ユーザーの入力 searchString が適切にサニタイズされ、クエリが SQL インジェクションから保護されることが保証されます。
さらに、クエリは SQL Server で直接実行された場合に結果を返すことにも注意してください。
SELECT * FROM compliance_corner WHERE (body LIKE '%max%') OR (title LIKE '%max%')
これは、クエリがパラメーターなしで実行され、LIKE ステートメントが文字列 %max% を body 列および title 列の内容と直接比較するためです。ただし、パラメータを指定して実行すると、LIKE ステートメントはパラメータ値 @query と適切にサニタイズされた列の内容を比較するため、一致するものは返されません。
以上がSQL インジェクションを防ぐために SQL LIKE ステートメントでパラメータを安全に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。