ホームページ > データベース > mysql チュートリアル > SQL インジェクションを防ぐために SQL LIKE ステートメントでパラメータを安全に使用するにはどうすればよいですか?

SQL インジェクションを防ぐために SQL LIKE ステートメントでパラメータを安全に使用するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-31 18:03:11
オリジナル
850 人が閲覧しました

How Can I Safely Use Parameters with SQL LIKE Statements to Prevent SQL Injection?

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

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