3

LIKEステートメントで SQL インジェクションを停止する最良の方法は何ですか? コードの例を次に示します。

string search = Server.HTMLDecode(userEnteredSearchText);
SqlCommand comm = new SqlCommand("SELECT Result WHERE (Keyword LIKE '%" + @search + "%') "
comm.Parameters.Add(new SqlParameter("search", search));

これは私が他のSQLステートメントで行ってきたことであり、これらのステートメントを破ることができないなどの特殊文字のようですが、エスケープキーなどを実行する必要があるステートメントで推測して'いますか?%LIKE

4

3 に答える 3

2

申し訳ありませんが、引用符はオフです。SQL内でを連結する必要があることを除いて、他のすべての場合とまったく同じように行います%。また、HTMLDecodeおそらくここであなたに何の役にも立ちませんよね?含むものをデータベースで検索したい場合はどうなりますか"&"

Search = userEnteredSearchText);

SqlCommand comm = new SqlCommand("SELECT Result WHERE Keyword LIKE '%' + @search + '%'");
comm.Parameters.Add(new SqlParameter("search", search));

したがって、あなたの例では、 SQL リテラルを閉じて に入れていましたが@search、これは無効なキーワードまたは変数です。SQL ステートメント内にそのままにしておく必要があります。他の DB の場合は、一緒にする必要がありますCONCAT。しかし、バインド変数は、ドライバーに送られるものを適切にエスケープします。

于 2013-01-05T22:28:35.560 に答える